// $ANTLR 3.2 Sep 23, 2009 12:02:23 X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g 2010-11-22 12:41:09

// The variable 'variable' is assigned but its value is never used.
#pragma warning disable 168, 219
// Unreachable code detected.
#pragma warning disable 162


	using System.Collections.Generic;
	using PSLib.Parsing.Common;


using System;
using Antlr.Runtime;
using IList 		= System.Collections.IList;
using ArrayList 	= System.Collections.ArrayList;
using Stack 		= Antlr.Runtime.Collections.StackList;

using IDictionary	= System.Collections.IDictionary;
using Hashtable 	= System.Collections.Hashtable;

using Antlr.Runtime.Tree;

namespace PSLib.Parsing.Lua
{
public partial class Lua2Parser : Parser
{
    public static readonly string[] tokenNames = new string[] 
	{
        "<invalid>", 
		"<EOR>", 
		"<DOWN>", 
		"<UP>", 
		"BLOCK", 
		"NAME", 
		"INT", 
		"FLOAT", 
		"EXP", 
		"HEX", 
		"NORMALSTRING", 
		"CHARSTRING", 
		"LONGSTRING", 
		"LINE_BREAK", 
		"LINE_COMMENT", 
		"COMMENT", 
		"WS", 
		"HEX_DIGIT", 
		"UNICODE_ESC", 
		"OCTAL_ESC", 
		"ESC_SEQ", 
		"';'", 
		"'local'", 
		"'='", 
		"'function'", 
		"'for'", 
		"','", 
		"'do'", 
		"'end'", 
		"'in'", 
		"'if'", 
		"'then'", 
		"'elseif'", 
		"'else'", 
		"'return'", 
		"'break'", 
		"'repeat'", 
		"'until'", 
		"'while'", 
		"'.'", 
		"':'", 
		"'nil'", 
		"'false'", 
		"'true'", 
		"'...'", 
		"'+'", 
		"'-'", 
		"'*'", 
		"'/'", 
		"'^'", 
		"'%'", 
		"'..'", 
		"'<'", 
		"'<='", 
		"'>'", 
		"'>='", 
		"'=='", 
		"'~='", 
		"'and'", 
		"'or'", 
		"'('", 
		"')'", 
		"'['", 
		"']'", 
		"'{'", 
		"'}'", 
		"'not'", 
		"'#'"
    };

    public const int T__66 = 66;
    public const int T__67 = 67;
    public const int T__64 = 64;
    public const int T__29 = 29;
    public const int T__65 = 65;
    public const int T__28 = 28;
    public const int T__62 = 62;
    public const int T__27 = 27;
    public const int T__63 = 63;
    public const int T__26 = 26;
    public const int T__25 = 25;
    public const int T__24 = 24;
    public const int T__23 = 23;
    public const int T__22 = 22;
    public const int T__21 = 21;
    public const int OCTAL_ESC = 19;
    public const int FLOAT = 7;
    public const int T__61 = 61;
    public const int EOF = -1;
    public const int T__60 = 60;
    public const int T__55 = 55;
    public const int T__56 = 56;
    public const int T__57 = 57;
    public const int NAME = 5;
    public const int T__58 = 58;
    public const int ESC_SEQ = 20;
    public const int T__51 = 51;
    public const int T__52 = 52;
    public const int T__53 = 53;
    public const int T__54 = 54;
    public const int EXP = 8;
    public const int HEX = 9;
    public const int T__59 = 59;
    public const int COMMENT = 15;
    public const int T__50 = 50;
    public const int T__42 = 42;
    public const int T__43 = 43;
    public const int T__40 = 40;
    public const int T__41 = 41;
    public const int T__46 = 46;
    public const int T__47 = 47;
    public const int T__44 = 44;
    public const int T__45 = 45;
    public const int LINE_COMMENT = 14;
    public const int T__48 = 48;
    public const int T__49 = 49;
    public const int UNICODE_ESC = 18;
    public const int HEX_DIGIT = 17;
    public const int CHARSTRING = 11;
    public const int INT = 6;
    public const int LONGSTRING = 12;
    public const int T__30 = 30;
    public const int NORMALSTRING = 10;
    public const int T__31 = 31;
    public const int LINE_BREAK = 13;
    public const int T__32 = 32;
    public const int WS = 16;
    public const int T__33 = 33;
    public const int T__34 = 34;
    public const int T__35 = 35;
    public const int T__36 = 36;
    public const int T__37 = 37;
    public const int T__38 = 38;
    public const int T__39 = 39;
    public const int BLOCK = 4;

    // delegates
    // delegators



        public Lua2Parser(ITokenStream input)
    		: this(input, new RecognizerSharedState()) {
        }

        public Lua2Parser(ITokenStream input, RecognizerSharedState state)
    		: base(input, state) {
            InitializeCyclicDFAs();
            this.state.ruleMemo = new Hashtable[114+1];
             
             
        }
        
    protected ITreeAdaptor adaptor = new CommonTreeAdaptor();

    public ITreeAdaptor TreeAdaptor
    {
        get { return this.adaptor; }
        set {
    	this.adaptor = value;
    	}
    }

    override public string[] TokenNames {
		get { return Lua2Parser.tokenNames; }
    }

    override public string GrammarFileName {
		get { return "X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g"; }
    }


    	


    public class program_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "program"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:1: program : ( chunk | EOF ) -> ^( BLOCK[\"program\",this.Input,startPos,this.Input.Index()-1] chunk ) ;
    public Lua2Parser.program_return program() // throws RecognitionException [1]
    {   
        Lua2Parser.program_return retval = new Lua2Parser.program_return();
        retval.Start = input.LT(1);
        int program_StartIndex = input.Index();
        object root_0 = null;

        IToken EOF2 = null;
        Lua2Parser.chunk_return chunk1 = default(Lua2Parser.chunk_return);


        object EOF2_tree=null;
        RewriteRuleTokenStream stream_EOF = new RewriteRuleTokenStream(adaptor,"token EOF");
        RewriteRuleSubtreeStream stream_chunk = new RewriteRuleSubtreeStream(adaptor,"rule chunk");
        int startPos = this.Input.Index(); 
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 1) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:51: ( ( chunk | EOF ) -> ^( BLOCK[\"program\",this.Input,startPos,this.Input.Index()-1] chunk ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:53: ( chunk | EOF )
            {
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:53: ( chunk | EOF )
            	int alt1 = 2;
            	int LA1_0 = input.LA(1);

            	if ( (LA1_0 == NAME || LA1_0 == 22 || (LA1_0 >= 24 && LA1_0 <= 25) || LA1_0 == 27 || LA1_0 == 30 || (LA1_0 >= 34 && LA1_0 <= 36) || LA1_0 == 38 || LA1_0 == 60) )
            	{
            	    alt1 = 1;
            	}
            	else if ( (LA1_0 == EOF) )
            	{
            	    int LA1_2 = input.LA(2);

            	    if ( (LA1_2 == EOF) )
            	    {
            	        alt1 = 2;
            	    }
            	    else 
            	    {
            	        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	        NoViableAltException nvae_d1s2 =
            	            new NoViableAltException("", 1, 2, input);

            	        throw nvae_d1s2;
            	    }
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d1s0 =
            	        new NoViableAltException("", 1, 0, input);

            	    throw nvae_d1s0;
            	}
            	switch (alt1) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:54: chunk
            	        {
            	        	PushFollow(FOLLOW_chunk_in_program133);
            	        	chunk1 = chunk();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( (state.backtracking==0) ) stream_chunk.Add(chunk1.Tree);

            	        }
            	        break;
            	    case 2 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:62: EOF
            	        {
            	        	EOF2=(IToken)Match(input,EOF,FOLLOW_EOF_in_program137); if (state.failed) return retval; 
            	        	if ( (state.backtracking==0) ) stream_EOF.Add(EOF2);


            	        }
            	        break;

            	}



            	// AST REWRITE
            	// elements:          chunk
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (object)adaptor.GetNilNode();
            	// 54:67: -> ^( BLOCK[\"program\",this.Input,startPos,this.Input.Index()-1] chunk )
            	{
            	    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:54:70: ^( BLOCK[\"program\",this.Input,startPos,this.Input.Index()-1] chunk )
            	    {
            	    object root_1 = (object)adaptor.GetNilNode();
            	    root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(BLOCK, "program", this.Input, startPos, this.Input.Index()-1), root_1);

            	    adaptor.AddChild(root_1, stream_chunk.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 1, program_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "program"

    public class chunk_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "chunk"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:1: chunk : ( stat ( ';' )? )* ( laststat ( ';' )? )? ;
    public Lua2Parser.chunk_return chunk() // throws RecognitionException [1]
    {   
        Lua2Parser.chunk_return retval = new Lua2Parser.chunk_return();
        retval.Start = input.LT(1);
        int chunk_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal4 = null;
        IToken char_literal6 = null;
        Lua2Parser.stat_return stat3 = default(Lua2Parser.stat_return);

        Lua2Parser.laststat_return laststat5 = default(Lua2Parser.laststat_return);


        object char_literal4_tree=null;
        object char_literal6_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 2) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:7: ( ( stat ( ';' )? )* ( laststat ( ';' )? )? )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:9: ( stat ( ';' )? )* ( laststat ( ';' )? )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:9: ( stat ( ';' )? )*
            	do 
            	{
            	    int alt3 = 2;
            	    int LA3_0 = input.LA(1);

            	    if ( (LA3_0 == NAME || LA3_0 == 22 || (LA3_0 >= 24 && LA3_0 <= 25) || LA3_0 == 27 || LA3_0 == 30 || LA3_0 == 36 || LA3_0 == 38 || LA3_0 == 60) )
            	    {
            	        alt3 = 1;
            	    }


            	    switch (alt3) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:10: stat ( ';' )?
            			    {
            			    	PushFollow(FOLLOW_stat_in_chunk155);
            			    	stat3 = stat();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, stat3.Tree);
            			    	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:15: ( ';' )?
            			    	int alt2 = 2;
            			    	int LA2_0 = input.LA(1);

            			    	if ( (LA2_0 == 21) )
            			    	{
            			    	    alt2 = 1;
            			    	}
            			    	switch (alt2) 
            			    	{
            			    	    case 1 :
            			    	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:16: ';'
            			    	        {
            			    	        	char_literal4=(IToken)Match(input,21,FOLLOW_21_in_chunk158); if (state.failed) return retval;
            			    	        	if ( state.backtracking == 0 )
            			    	        	{char_literal4_tree = (object)adaptor.Create(char_literal4);
            			    	        		adaptor.AddChild(root_0, char_literal4_tree);
            			    	        	}

            			    	        }
            			    	        break;

            			    	}


            			    }
            			    break;

            			default:
            			    goto loop3;
            	    }
            	} while (true);

            	loop3:
            		;	// Stops C# compiler whining that label 'loop3' has no statements

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:24: ( laststat ( ';' )? )?
            	int alt5 = 2;
            	int LA5_0 = input.LA(1);

            	if ( ((LA5_0 >= 34 && LA5_0 <= 35)) )
            	{
            	    alt5 = 1;
            	}
            	switch (alt5) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:25: laststat ( ';' )?
            	        {
            	        	PushFollow(FOLLOW_laststat_in_chunk165);
            	        	laststat5 = laststat();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, laststat5.Tree);
            	        	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:34: ( ';' )?
            	        	int alt4 = 2;
            	        	int LA4_0 = input.LA(1);

            	        	if ( (LA4_0 == 21) )
            	        	{
            	        	    alt4 = 1;
            	        	}
            	        	switch (alt4) 
            	        	{
            	        	    case 1 :
            	        	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:55:35: ';'
            	        	        {
            	        	        	char_literal6=(IToken)Match(input,21,FOLLOW_21_in_chunk168); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{char_literal6_tree = (object)adaptor.Create(char_literal6);
            	        	        		adaptor.AddChild(root_0, char_literal6_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 2, chunk_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "chunk"

    public class block_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "block"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:1: block : ( ( chunk )? ) ;
    public Lua2Parser.block_return block() // throws RecognitionException [1]
    {   
        Lua2Parser.block_return retval = new Lua2Parser.block_return();
        retval.Start = input.LT(1);
        int block_StartIndex = input.Index();
        object root_0 = null;

        Lua2Parser.chunk_return chunk7 = default(Lua2Parser.chunk_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 3) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:7: ( ( ( chunk )? ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:9: ( ( chunk )? )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:9: ( ( chunk )? )
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:11: ( chunk )?
            	{
            		// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:11: ( chunk )?
            		int alt6 = 2;
            		switch ( input.LA(1) ) 
            		{
            		    case NAME:
            		    case 22:
            		    case 24:
            		    case 25:
            		    case 27:
            		    case 30:
            		    case 34:
            		    case 35:
            		    case 36:
            		    case 38:
            		    case 60:
            		    	{
            		        alt6 = 1;
            		        }
            		        break;
            		    case 28:
            		    	{
            		        int LA6_2 = input.LA(2);

            		        if ( (synpred6_Lua2()) )
            		        {
            		            alt6 = 1;
            		        }
            		        }
            		        break;
            		    case 32:
            		    	{
            		        int LA6_3 = input.LA(2);

            		        if ( (synpred6_Lua2()) )
            		        {
            		            alt6 = 1;
            		        }
            		        }
            		        break;
            		    case 33:
            		    	{
            		        int LA6_4 = input.LA(2);

            		        if ( (synpred6_Lua2()) )
            		        {
            		            alt6 = 1;
            		        }
            		        }
            		        break;
            		    case 37:
            		    	{
            		        int LA6_5 = input.LA(2);

            		        if ( (synpred6_Lua2()) )
            		        {
            		            alt6 = 1;
            		        }
            		        }
            		        break;
            		    case EOF:
            		    	{
            		        int LA6_6 = input.LA(2);

            		        if ( (synpred6_Lua2()) )
            		        {
            		            alt6 = 1;
            		        }
            		        }
            		        break;
            		}

            		switch (alt6) 
            		{
            		    case 1 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:0:0: chunk
            		        {
            		        	PushFollow(FOLLOW_chunk_in_block183);
            		        	chunk7 = chunk();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, chunk7.Tree);

            		        }
            		        break;

            		}


            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 3, block_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "block"

    public class stat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "stat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:59:1: stat : ( var_assignment | functioncall | do_block | while_stat | repeat_stat | if_stat | for_stat | func_definition | var_definition );
    public Lua2Parser.stat_return stat() // throws RecognitionException [1]
    {   
        Lua2Parser.stat_return retval = new Lua2Parser.stat_return();
        retval.Start = input.LT(1);
        int stat_StartIndex = input.Index();
        object root_0 = null;

        Lua2Parser.var_assignment_return var_assignment8 = default(Lua2Parser.var_assignment_return);

        Lua2Parser.functioncall_return functioncall9 = default(Lua2Parser.functioncall_return);

        Lua2Parser.do_block_return do_block10 = default(Lua2Parser.do_block_return);

        Lua2Parser.while_stat_return while_stat11 = default(Lua2Parser.while_stat_return);

        Lua2Parser.repeat_stat_return repeat_stat12 = default(Lua2Parser.repeat_stat_return);

        Lua2Parser.if_stat_return if_stat13 = default(Lua2Parser.if_stat_return);

        Lua2Parser.for_stat_return for_stat14 = default(Lua2Parser.for_stat_return);

        Lua2Parser.func_definition_return func_definition15 = default(Lua2Parser.func_definition_return);

        Lua2Parser.var_definition_return var_definition16 = default(Lua2Parser.var_definition_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 4) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:59:7: ( var_assignment | functioncall | do_block | while_stat | repeat_stat | if_stat | for_stat | func_definition | var_definition )
            int alt7 = 9;
            alt7 = dfa7.Predict(input);
            switch (alt7) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:59:9: var_assignment
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_var_assignment_in_stat196);
                    	var_assignment8 = var_assignment();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, var_assignment8.Tree);

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:60:5: functioncall
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_functioncall_in_stat202);
                    	functioncall9 = functioncall();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, functioncall9.Tree);

                    }
                    break;
                case 3 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:61:5: do_block
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_do_block_in_stat208);
                    	do_block10 = do_block();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, do_block10.Tree);

                    }
                    break;
                case 4 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:62:5: while_stat
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_while_stat_in_stat214);
                    	while_stat11 = while_stat();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, while_stat11.Tree);

                    }
                    break;
                case 5 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:63:5: repeat_stat
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_repeat_stat_in_stat220);
                    	repeat_stat12 = repeat_stat();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, repeat_stat12.Tree);

                    }
                    break;
                case 6 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:64:5: if_stat
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_if_stat_in_stat226);
                    	if_stat13 = if_stat();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, if_stat13.Tree);

                    }
                    break;
                case 7 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:65:5: for_stat
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_for_stat_in_stat232);
                    	for_stat14 = for_stat();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, for_stat14.Tree);

                    }
                    break;
                case 8 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:66:5: func_definition
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_func_definition_in_stat238);
                    	func_definition15 = func_definition();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, func_definition15.Tree);

                    }
                    break;
                case 9 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:67:5: var_definition
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_var_definition_in_stat244);
                    	var_definition16 = var_definition();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, var_definition16.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 4, stat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "stat"

    public class var_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "var_definition"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:69:1: var_definition : 'local' namelist ( '=' explist1 )? ;
    public Lua2Parser.var_definition_return var_definition() // throws RecognitionException [1]
    {   
        Lua2Parser.var_definition_return retval = new Lua2Parser.var_definition_return();
        retval.Start = input.LT(1);
        int var_definition_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal17 = null;
        IToken char_literal19 = null;
        Lua2Parser.namelist_return namelist18 = default(Lua2Parser.namelist_return);

        Lua2Parser.explist1_return explist120 = default(Lua2Parser.explist1_return);


        object string_literal17_tree=null;
        object char_literal19_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 5) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:69:15: ( 'local' namelist ( '=' explist1 )? )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:69:17: 'local' namelist ( '=' explist1 )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal17=(IToken)Match(input,22,FOLLOW_22_in_var_definition254); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal17_tree = (object)adaptor.Create(string_literal17);
            		adaptor.AddChild(root_0, string_literal17_tree);
            	}
            	PushFollow(FOLLOW_namelist_in_var_definition256);
            	namelist18 = namelist();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, namelist18.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:69:34: ( '=' explist1 )?
            	int alt8 = 2;
            	int LA8_0 = input.LA(1);

            	if ( (LA8_0 == 23) )
            	{
            	    alt8 = 1;
            	}
            	switch (alt8) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:69:35: '=' explist1
            	        {
            	        	char_literal19=(IToken)Match(input,23,FOLLOW_23_in_var_definition259); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal19_tree = (object)adaptor.Create(char_literal19);
            	        		adaptor.AddChild(root_0, char_literal19_tree);
            	        	}
            	        	PushFollow(FOLLOW_explist1_in_var_definition261);
            	        	explist120 = explist1();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, explist120.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 5, var_definition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "var_definition"

    public class var_assignment_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "var_assignment"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:71:1: var_assignment : varlist1 '=' explist1 ;
    public Lua2Parser.var_assignment_return var_assignment() // throws RecognitionException [1]
    {   
        Lua2Parser.var_assignment_return retval = new Lua2Parser.var_assignment_return();
        retval.Start = input.LT(1);
        int var_assignment_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal22 = null;
        Lua2Parser.varlist1_return varlist121 = default(Lua2Parser.varlist1_return);

        Lua2Parser.explist1_return explist123 = default(Lua2Parser.explist1_return);


        object char_literal22_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 6) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:71:16: ( varlist1 '=' explist1 )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:71:18: varlist1 '=' explist1
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_varlist1_in_var_assignment272);
            	varlist121 = varlist1();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, varlist121.Tree);
            	char_literal22=(IToken)Match(input,23,FOLLOW_23_in_var_assignment274); if (state.failed) return retval;
            	PushFollow(FOLLOW_explist1_in_var_assignment277);
            	explist123 = explist1();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, explist123.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 6, var_assignment_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "var_assignment"

    public class func_definition_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "func_definition"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:73:1: func_definition : ( 'local' 'function' NAME func_body | 'function' funcname func_body );
    public Lua2Parser.func_definition_return func_definition() // throws RecognitionException [1]
    {   
        Lua2Parser.func_definition_return retval = new Lua2Parser.func_definition_return();
        retval.Start = input.LT(1);
        int func_definition_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal24 = null;
        IToken string_literal25 = null;
        IToken NAME26 = null;
        IToken string_literal28 = null;
        Lua2Parser.func_body_return func_body27 = default(Lua2Parser.func_body_return);

        Lua2Parser.funcname_return funcname29 = default(Lua2Parser.funcname_return);

        Lua2Parser.func_body_return func_body30 = default(Lua2Parser.func_body_return);


        object string_literal24_tree=null;
        object string_literal25_tree=null;
        object NAME26_tree=null;
        object string_literal28_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 7) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:73:17: ( 'local' 'function' NAME func_body | 'function' funcname func_body )
            int alt9 = 2;
            int LA9_0 = input.LA(1);

            if ( (LA9_0 == 22) )
            {
                alt9 = 1;
            }
            else if ( (LA9_0 == 24) )
            {
                alt9 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d9s0 =
                    new NoViableAltException("", 9, 0, input);

                throw nvae_d9s0;
            }
            switch (alt9) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:73:19: 'local' 'function' NAME func_body
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal24=(IToken)Match(input,22,FOLLOW_22_in_func_definition285); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal24_tree = (object)adaptor.Create(string_literal24);
                    		adaptor.AddChild(root_0, string_literal24_tree);
                    	}
                    	string_literal25=(IToken)Match(input,24,FOLLOW_24_in_func_definition287); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal25_tree = (object)adaptor.Create(string_literal25);
                    		adaptor.AddChild(root_0, string_literal25_tree);
                    	}
                    	NAME26=(IToken)Match(input,NAME,FOLLOW_NAME_in_func_definition289); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{NAME26_tree = (object)adaptor.Create(NAME26);
                    		adaptor.AddChild(root_0, NAME26_tree);
                    	}
                    	PushFollow(FOLLOW_func_body_in_func_definition291);
                    	func_body27 = func_body();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, func_body27.Tree);

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:74:7: 'function' funcname func_body
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal28=(IToken)Match(input,24,FOLLOW_24_in_func_definition299); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal28_tree = (object)adaptor.Create(string_literal28);
                    		adaptor.AddChild(root_0, string_literal28_tree);
                    	}
                    	PushFollow(FOLLOW_funcname_in_func_definition301);
                    	funcname29 = funcname();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, funcname29.Tree);
                    	PushFollow(FOLLOW_func_body_in_func_definition303);
                    	func_body30 = func_body();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, func_body30.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 7, func_definition_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "func_definition"

    public class for_stat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "for_stat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:76:1: for_stat : ( 'for' NAME '=' exp ',' exp ( ',' exp )? 'do' block 'end' | 'for' namelist 'in' explist1 'do' block 'end' );
    public Lua2Parser.for_stat_return for_stat() // throws RecognitionException [1]
    {   
        Lua2Parser.for_stat_return retval = new Lua2Parser.for_stat_return();
        retval.Start = input.LT(1);
        int for_stat_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal31 = null;
        IToken NAME32 = null;
        IToken char_literal33 = null;
        IToken char_literal35 = null;
        IToken char_literal37 = null;
        IToken string_literal39 = null;
        IToken string_literal41 = null;
        IToken string_literal42 = null;
        IToken string_literal44 = null;
        IToken string_literal46 = null;
        IToken string_literal48 = null;
        Lua2Parser.exp_return exp34 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp36 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp38 = default(Lua2Parser.exp_return);

        Lua2Parser.block_return block40 = default(Lua2Parser.block_return);

        Lua2Parser.namelist_return namelist43 = default(Lua2Parser.namelist_return);

        Lua2Parser.explist1_return explist145 = default(Lua2Parser.explist1_return);

        Lua2Parser.block_return block47 = default(Lua2Parser.block_return);


        object string_literal31_tree=null;
        object NAME32_tree=null;
        object char_literal33_tree=null;
        object char_literal35_tree=null;
        object char_literal37_tree=null;
        object string_literal39_tree=null;
        object string_literal41_tree=null;
        object string_literal42_tree=null;
        object string_literal44_tree=null;
        object string_literal46_tree=null;
        object string_literal48_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 8) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:77:2: ( 'for' NAME '=' exp ',' exp ( ',' exp )? 'do' block 'end' | 'for' namelist 'in' explist1 'do' block 'end' )
            int alt11 = 2;
            int LA11_0 = input.LA(1);

            if ( (LA11_0 == 25) )
            {
                int LA11_1 = input.LA(2);

                if ( (LA11_1 == NAME) )
                {
                    int LA11_2 = input.LA(3);

                    if ( (LA11_2 == 23) )
                    {
                        alt11 = 1;
                    }
                    else if ( (LA11_2 == 26 || LA11_2 == 29) )
                    {
                        alt11 = 2;
                    }
                    else 
                    {
                        if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                        NoViableAltException nvae_d11s2 =
                            new NoViableAltException("", 11, 2, input);

                        throw nvae_d11s2;
                    }
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d11s1 =
                        new NoViableAltException("", 11, 1, input);

                    throw nvae_d11s1;
                }
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d11s0 =
                    new NoViableAltException("", 11, 0, input);

                throw nvae_d11s0;
            }
            switch (alt11) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:77:4: 'for' NAME '=' exp ',' exp ( ',' exp )? 'do' block 'end'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal31=(IToken)Match(input,25,FOLLOW_25_in_for_stat314); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal31_tree = (object)adaptor.Create(string_literal31);
                    		adaptor.AddChild(root_0, string_literal31_tree);
                    	}
                    	NAME32=(IToken)Match(input,NAME,FOLLOW_NAME_in_for_stat316); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{NAME32_tree = (object)adaptor.Create(NAME32);
                    		adaptor.AddChild(root_0, NAME32_tree);
                    	}
                    	char_literal33=(IToken)Match(input,23,FOLLOW_23_in_for_stat318); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal33_tree = (object)adaptor.Create(char_literal33);
                    		adaptor.AddChild(root_0, char_literal33_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_for_stat320);
                    	exp34 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp34.Tree);
                    	char_literal35=(IToken)Match(input,26,FOLLOW_26_in_for_stat322); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal35_tree = (object)adaptor.Create(char_literal35);
                    		adaptor.AddChild(root_0, char_literal35_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_for_stat324);
                    	exp36 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp36.Tree);
                    	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:77:31: ( ',' exp )?
                    	int alt10 = 2;
                    	int LA10_0 = input.LA(1);

                    	if ( (LA10_0 == 26) )
                    	{
                    	    alt10 = 1;
                    	}
                    	switch (alt10) 
                    	{
                    	    case 1 :
                    	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:77:32: ',' exp
                    	        {
                    	        	char_literal37=(IToken)Match(input,26,FOLLOW_26_in_for_stat327); if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 )
                    	        	{char_literal37_tree = (object)adaptor.Create(char_literal37);
                    	        		adaptor.AddChild(root_0, char_literal37_tree);
                    	        	}
                    	        	PushFollow(FOLLOW_exp_in_for_stat329);
                    	        	exp38 = exp();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp38.Tree);

                    	        }
                    	        break;

                    	}

                    	string_literal39=(IToken)Match(input,27,FOLLOW_27_in_for_stat333); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal39_tree = (object)adaptor.Create(string_literal39);
                    		adaptor.AddChild(root_0, string_literal39_tree);
                    	}
                    	PushFollow(FOLLOW_block_in_for_stat335);
                    	block40 = block();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block40.Tree);
                    	string_literal41=(IToken)Match(input,28,FOLLOW_28_in_for_stat337); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal41_tree = (object)adaptor.Create(string_literal41);
                    		adaptor.AddChild(root_0, string_literal41_tree);
                    	}

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:78:4: 'for' namelist 'in' explist1 'do' block 'end'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal42=(IToken)Match(input,25,FOLLOW_25_in_for_stat343); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal42_tree = (object)adaptor.Create(string_literal42);
                    		adaptor.AddChild(root_0, string_literal42_tree);
                    	}
                    	PushFollow(FOLLOW_namelist_in_for_stat345);
                    	namelist43 = namelist();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, namelist43.Tree);
                    	string_literal44=(IToken)Match(input,29,FOLLOW_29_in_for_stat347); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal44_tree = (object)adaptor.Create(string_literal44);
                    		adaptor.AddChild(root_0, string_literal44_tree);
                    	}
                    	PushFollow(FOLLOW_explist1_in_for_stat349);
                    	explist145 = explist1();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, explist145.Tree);
                    	string_literal46=(IToken)Match(input,27,FOLLOW_27_in_for_stat351); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal46_tree = (object)adaptor.Create(string_literal46);
                    		adaptor.AddChild(root_0, string_literal46_tree);
                    	}
                    	PushFollow(FOLLOW_block_in_for_stat353);
                    	block47 = block();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block47.Tree);
                    	string_literal48=(IToken)Match(input,28,FOLLOW_28_in_for_stat355); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal48_tree = (object)adaptor.Create(string_literal48);
                    		adaptor.AddChild(root_0, string_literal48_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 8, for_stat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "for_stat"

    public class if_stat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "if_stat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:1: if_stat : 'if' exp 'then' block ( 'elseif' exp 'then' block )* ( 'else' block )? 'end' ;
    public Lua2Parser.if_stat_return if_stat() // throws RecognitionException [1]
    {   
        Lua2Parser.if_stat_return retval = new Lua2Parser.if_stat_return();
        retval.Start = input.LT(1);
        int if_stat_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal49 = null;
        IToken string_literal51 = null;
        IToken string_literal53 = null;
        IToken string_literal55 = null;
        IToken string_literal57 = null;
        IToken string_literal59 = null;
        Lua2Parser.exp_return exp50 = default(Lua2Parser.exp_return);

        Lua2Parser.block_return block52 = default(Lua2Parser.block_return);

        Lua2Parser.exp_return exp54 = default(Lua2Parser.exp_return);

        Lua2Parser.block_return block56 = default(Lua2Parser.block_return);

        Lua2Parser.block_return block58 = default(Lua2Parser.block_return);


        object string_literal49_tree=null;
        object string_literal51_tree=null;
        object string_literal53_tree=null;
        object string_literal55_tree=null;
        object string_literal57_tree=null;
        object string_literal59_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 9) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:10: ( 'if' exp 'then' block ( 'elseif' exp 'then' block )* ( 'else' block )? 'end' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:11: 'if' exp 'then' block ( 'elseif' exp 'then' block )* ( 'else' block )? 'end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal49=(IToken)Match(input,30,FOLLOW_30_in_if_stat368); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal49_tree = (object)adaptor.Create(string_literal49);
            		adaptor.AddChild(root_0, string_literal49_tree);
            	}
            	PushFollow(FOLLOW_exp_in_if_stat370);
            	exp50 = exp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp50.Tree);
            	string_literal51=(IToken)Match(input,31,FOLLOW_31_in_if_stat372); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal51_tree = (object)adaptor.Create(string_literal51);
            		adaptor.AddChild(root_0, string_literal51_tree);
            	}
            	PushFollow(FOLLOW_block_in_if_stat374);
            	block52 = block();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block52.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:33: ( 'elseif' exp 'then' block )*
            	do 
            	{
            	    int alt12 = 2;
            	    int LA12_0 = input.LA(1);

            	    if ( (LA12_0 == 32) )
            	    {
            	        alt12 = 1;
            	    }


            	    switch (alt12) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:34: 'elseif' exp 'then' block
            			    {
            			    	string_literal53=(IToken)Match(input,32,FOLLOW_32_in_if_stat377); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal53_tree = (object)adaptor.Create(string_literal53);
            			    		adaptor.AddChild(root_0, string_literal53_tree);
            			    	}
            			    	PushFollow(FOLLOW_exp_in_if_stat379);
            			    	exp54 = exp();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp54.Tree);
            			    	string_literal55=(IToken)Match(input,31,FOLLOW_31_in_if_stat381); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{string_literal55_tree = (object)adaptor.Create(string_literal55);
            			    		adaptor.AddChild(root_0, string_literal55_tree);
            			    	}
            			    	PushFollow(FOLLOW_block_in_if_stat383);
            			    	block56 = block();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block56.Tree);

            			    }
            			    break;

            			default:
            			    goto loop12;
            	    }
            	} while (true);

            	loop12:
            		;	// Stops C# compiler whining that label 'loop12' has no statements

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:63: ( 'else' block )?
            	int alt13 = 2;
            	int LA13_0 = input.LA(1);

            	if ( (LA13_0 == 33) )
            	{
            	    alt13 = 1;
            	}
            	switch (alt13) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:80:64: 'else' block
            	        {
            	        	string_literal57=(IToken)Match(input,33,FOLLOW_33_in_if_stat389); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{string_literal57_tree = (object)adaptor.Create(string_literal57);
            	        		adaptor.AddChild(root_0, string_literal57_tree);
            	        	}
            	        	PushFollow(FOLLOW_block_in_if_stat391);
            	        	block58 = block();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block58.Tree);

            	        }
            	        break;

            	}

            	string_literal59=(IToken)Match(input,28,FOLLOW_28_in_if_stat395); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal59_tree = (object)adaptor.Create(string_literal59);
            		adaptor.AddChild(root_0, string_literal59_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 9, if_stat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "if_stat"

    public class laststat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "laststat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:1: laststat : ( 'return' ( explist1 )? | 'break' );
    public Lua2Parser.laststat_return laststat() // throws RecognitionException [1]
    {   
        Lua2Parser.laststat_return retval = new Lua2Parser.laststat_return();
        retval.Start = input.LT(1);
        int laststat_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal60 = null;
        IToken string_literal62 = null;
        Lua2Parser.explist1_return explist161 = default(Lua2Parser.explist1_return);


        object string_literal60_tree=null;
        object string_literal62_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 10) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:10: ( 'return' ( explist1 )? | 'break' )
            int alt15 = 2;
            int LA15_0 = input.LA(1);

            if ( (LA15_0 == 34) )
            {
                alt15 = 1;
            }
            else if ( (LA15_0 == 35) )
            {
                alt15 = 2;
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d15s0 =
                    new NoViableAltException("", 15, 0, input);

                throw nvae_d15s0;
            }
            switch (alt15) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:12: 'return' ( explist1 )?
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal60=(IToken)Match(input,34,FOLLOW_34_in_laststat403); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal60_tree = (object)adaptor.Create(string_literal60);
                    		adaptor.AddChild(root_0, string_literal60_tree);
                    	}
                    	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:21: ( explist1 )?
                    	int alt14 = 2;
                    	int LA14_0 = input.LA(1);

                    	if ( ((LA14_0 >= NAME && LA14_0 <= LONGSTRING) || LA14_0 == 24 || (LA14_0 >= 41 && LA14_0 <= 44) || LA14_0 == 46 || LA14_0 == 60 || LA14_0 == 64 || (LA14_0 >= 66 && LA14_0 <= 67)) )
                    	{
                    	    alt14 = 1;
                    	}
                    	switch (alt14) 
                    	{
                    	    case 1 :
                    	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:22: explist1
                    	        {
                    	        	PushFollow(FOLLOW_explist1_in_laststat406);
                    	        	explist161 = explist1();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, explist161.Tree);

                    	        }
                    	        break;

                    	}


                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:82:35: 'break'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	string_literal62=(IToken)Match(input,35,FOLLOW_35_in_laststat412); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{string_literal62_tree = (object)adaptor.Create(string_literal62);
                    		adaptor.AddChild(root_0, string_literal62_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 10, laststat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "laststat"

    public class repeat_stat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "repeat_stat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:84:1: repeat_stat : 'repeat' block 'until' exp ;
    public Lua2Parser.repeat_stat_return repeat_stat() // throws RecognitionException [1]
    {   
        Lua2Parser.repeat_stat_return retval = new Lua2Parser.repeat_stat_return();
        retval.Start = input.LT(1);
        int repeat_stat_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal63 = null;
        IToken string_literal65 = null;
        Lua2Parser.block_return block64 = default(Lua2Parser.block_return);

        Lua2Parser.exp_return exp66 = default(Lua2Parser.exp_return);


        object string_literal63_tree=null;
        object string_literal65_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 11) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:84:13: ( 'repeat' block 'until' exp )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:84:15: 'repeat' block 'until' exp
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal63=(IToken)Match(input,36,FOLLOW_36_in_repeat_stat420); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal63_tree = (object)adaptor.Create(string_literal63);
            		adaptor.AddChild(root_0, string_literal63_tree);
            	}
            	PushFollow(FOLLOW_block_in_repeat_stat422);
            	block64 = block();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block64.Tree);
            	string_literal65=(IToken)Match(input,37,FOLLOW_37_in_repeat_stat424); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal65_tree = (object)adaptor.Create(string_literal65);
            		adaptor.AddChild(root_0, string_literal65_tree);
            	}
            	PushFollow(FOLLOW_exp_in_repeat_stat426);
            	exp66 = exp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp66.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 11, repeat_stat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "repeat_stat"

    public class while_stat_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "while_stat"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:86:1: while_stat : 'while' exp 'do' block 'end' ;
    public Lua2Parser.while_stat_return while_stat() // throws RecognitionException [1]
    {   
        Lua2Parser.while_stat_return retval = new Lua2Parser.while_stat_return();
        retval.Start = input.LT(1);
        int while_stat_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal67 = null;
        IToken string_literal69 = null;
        IToken string_literal71 = null;
        Lua2Parser.exp_return exp68 = default(Lua2Parser.exp_return);

        Lua2Parser.block_return block70 = default(Lua2Parser.block_return);


        object string_literal67_tree=null;
        object string_literal69_tree=null;
        object string_literal71_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 12) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:86:12: ( 'while' exp 'do' block 'end' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:86:14: 'while' exp 'do' block 'end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal67=(IToken)Match(input,38,FOLLOW_38_in_while_stat434); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal67_tree = (object)adaptor.Create(string_literal67);
            		adaptor.AddChild(root_0, string_literal67_tree);
            	}
            	PushFollow(FOLLOW_exp_in_while_stat436);
            	exp68 = exp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp68.Tree);
            	string_literal69=(IToken)Match(input,27,FOLLOW_27_in_while_stat438); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal69_tree = (object)adaptor.Create(string_literal69);
            		adaptor.AddChild(root_0, string_literal69_tree);
            	}
            	PushFollow(FOLLOW_block_in_while_stat440);
            	block70 = block();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block70.Tree);
            	string_literal71=(IToken)Match(input,28,FOLLOW_28_in_while_stat442); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal71_tree = (object)adaptor.Create(string_literal71);
            		adaptor.AddChild(root_0, string_literal71_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 12, while_stat_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "while_stat"

    public class do_block_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "do_block"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:88:1: do_block : 'do' block 'end' -> ^( BLOCK[\"do_block\",this.Input,startPos,this.Input.Index()-1] block ) ;
    public Lua2Parser.do_block_return do_block() // throws RecognitionException [1]
    {   
        Lua2Parser.do_block_return retval = new Lua2Parser.do_block_return();
        retval.Start = input.LT(1);
        int do_block_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal72 = null;
        IToken string_literal74 = null;
        Lua2Parser.block_return block73 = default(Lua2Parser.block_return);


        object string_literal72_tree=null;
        object string_literal74_tree=null;
        RewriteRuleTokenStream stream_27 = new RewriteRuleTokenStream(adaptor,"token 27");
        RewriteRuleTokenStream stream_28 = new RewriteRuleTokenStream(adaptor,"token 28");
        RewriteRuleSubtreeStream stream_block = new RewriteRuleSubtreeStream(adaptor,"rule block");
        int startPos = this.Input.Index(); 
        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 13) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:88:52: ( 'do' block 'end' -> ^( BLOCK[\"do_block\",this.Input,startPos,this.Input.Index()-1] block ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:88:54: 'do' block 'end'
            {
            	string_literal72=(IToken)Match(input,27,FOLLOW_27_in_do_block453); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_27.Add(string_literal72);

            	PushFollow(FOLLOW_block_in_do_block455);
            	block73 = block();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( (state.backtracking==0) ) stream_block.Add(block73.Tree);
            	string_literal74=(IToken)Match(input,28,FOLLOW_28_in_do_block457); if (state.failed) return retval; 
            	if ( (state.backtracking==0) ) stream_28.Add(string_literal74);



            	// AST REWRITE
            	// elements:          block
            	// token labels:      
            	// rule labels:       retval
            	// token list labels: 
            	// rule list labels:  
            	// wildcard labels: 
            	if ( (state.backtracking==0) ) {
            	retval.Tree = root_0;
            	RewriteRuleSubtreeStream stream_retval = new RewriteRuleSubtreeStream(adaptor, "rule retval", retval!=null ? retval.Tree : null);

            	root_0 = (object)adaptor.GetNilNode();
            	// 88:71: -> ^( BLOCK[\"do_block\",this.Input,startPos,this.Input.Index()-1] block )
            	{
            	    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:88:74: ^( BLOCK[\"do_block\",this.Input,startPos,this.Input.Index()-1] block )
            	    {
            	    object root_1 = (object)adaptor.GetNilNode();
            	    root_1 = (object)adaptor.BecomeRoot((object)adaptor.Create(BLOCK, "do_block", this.Input, startPos, this.Input.Index()-1), root_1);

            	    adaptor.AddChild(root_1, stream_block.NextTree());

            	    adaptor.AddChild(root_0, root_1);
            	    }

            	}

            	retval.Tree = root_0;retval.Tree = root_0;}
            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 13, do_block_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "do_block"

    public class varlist1_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "varlist1"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:90:1: varlist1 : var ( ',' var )* ;
    public Lua2Parser.varlist1_return varlist1() // throws RecognitionException [1]
    {   
        Lua2Parser.varlist1_return retval = new Lua2Parser.varlist1_return();
        retval.Start = input.LT(1);
        int varlist1_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal76 = null;
        Lua2Parser.var_return var75 = default(Lua2Parser.var_return);

        Lua2Parser.var_return var77 = default(Lua2Parser.var_return);


        object char_literal76_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 14) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:90:11: ( var ( ',' var )* )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:90:13: var ( ',' var )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_var_in_varlist1475);
            	var75 = var();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, var75.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:90:17: ( ',' var )*
            	do 
            	{
            	    int alt16 = 2;
            	    int LA16_0 = input.LA(1);

            	    if ( (LA16_0 == 26) )
            	    {
            	        alt16 = 1;
            	    }


            	    switch (alt16) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:90:18: ',' var
            			    {
            			    	char_literal76=(IToken)Match(input,26,FOLLOW_26_in_varlist1478); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal76_tree = (object)adaptor.Create(char_literal76);
            			    		adaptor.AddChild(root_0, char_literal76_tree);
            			    	}
            			    	PushFollow(FOLLOW_var_in_varlist1480);
            			    	var77 = var();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, var77.Tree);

            			    }
            			    break;

            			default:
            			    goto loop16;
            	    }
            	} while (true);

            	loop16:
            		;	// Stops C# compiler whining that label 'loop16' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 14, varlist1_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "varlist1"

    public class funcname_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "funcname"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:1: funcname : NAME ( '.' NAME )* ( ':' NAME )? ;
    public Lua2Parser.funcname_return funcname() // throws RecognitionException [1]
    {   
        Lua2Parser.funcname_return retval = new Lua2Parser.funcname_return();
        retval.Start = input.LT(1);
        int funcname_StartIndex = input.Index();
        object root_0 = null;

        IToken NAME78 = null;
        IToken char_literal79 = null;
        IToken NAME80 = null;
        IToken char_literal81 = null;
        IToken NAME82 = null;

        object NAME78_tree=null;
        object char_literal79_tree=null;
        object NAME80_tree=null;
        object char_literal81_tree=null;
        object NAME82_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 15) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:10: ( NAME ( '.' NAME )* ( ':' NAME )? )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:12: NAME ( '.' NAME )* ( ':' NAME )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	NAME78=(IToken)Match(input,NAME,FOLLOW_NAME_in_funcname491); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{NAME78_tree = (object)adaptor.Create(NAME78);
            		adaptor.AddChild(root_0, NAME78_tree);
            	}
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:17: ( '.' NAME )*
            	do 
            	{
            	    int alt17 = 2;
            	    int LA17_0 = input.LA(1);

            	    if ( (LA17_0 == 39) )
            	    {
            	        alt17 = 1;
            	    }


            	    switch (alt17) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:18: '.' NAME
            			    {
            			    	char_literal79=(IToken)Match(input,39,FOLLOW_39_in_funcname494); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal79_tree = (object)adaptor.Create(char_literal79);
            			    		adaptor.AddChild(root_0, char_literal79_tree);
            			    	}
            			    	NAME80=(IToken)Match(input,NAME,FOLLOW_NAME_in_funcname496); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{NAME80_tree = (object)adaptor.Create(NAME80);
            			    		adaptor.AddChild(root_0, NAME80_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop17;
            	    }
            	} while (true);

            	loop17:
            		;	// Stops C# compiler whining that label 'loop17' has no statements

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:29: ( ':' NAME )?
            	int alt18 = 2;
            	int LA18_0 = input.LA(1);

            	if ( (LA18_0 == 40) )
            	{
            	    alt18 = 1;
            	}
            	switch (alt18) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:92:30: ':' NAME
            	        {
            	        	char_literal81=(IToken)Match(input,40,FOLLOW_40_in_funcname501); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal81_tree = (object)adaptor.Create(char_literal81);
            	        		adaptor.AddChild(root_0, char_literal81_tree);
            	        	}
            	        	NAME82=(IToken)Match(input,NAME,FOLLOW_NAME_in_funcname503); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{NAME82_tree = (object)adaptor.Create(NAME82);
            	        		adaptor.AddChild(root_0, NAME82_tree);
            	        	}

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 15, funcname_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "funcname"

    public class namelist_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "namelist"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:94:1: namelist : NAME ( ',' NAME )* ;
    public Lua2Parser.namelist_return namelist() // throws RecognitionException [1]
    {   
        Lua2Parser.namelist_return retval = new Lua2Parser.namelist_return();
        retval.Start = input.LT(1);
        int namelist_StartIndex = input.Index();
        object root_0 = null;

        IToken NAME83 = null;
        IToken char_literal84 = null;
        IToken NAME85 = null;

        object NAME83_tree=null;
        object char_literal84_tree=null;
        object NAME85_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 16) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:94:11: ( NAME ( ',' NAME )* )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:94:13: NAME ( ',' NAME )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	NAME83=(IToken)Match(input,NAME,FOLLOW_NAME_in_namelist515); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{NAME83_tree = (object)adaptor.Create(NAME83);
            		adaptor.AddChild(root_0, NAME83_tree);
            	}
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:94:18: ( ',' NAME )*
            	do 
            	{
            	    int alt19 = 2;
            	    int LA19_0 = input.LA(1);

            	    if ( (LA19_0 == 26) )
            	    {
            	        int LA19_2 = input.LA(2);

            	        if ( (LA19_2 == NAME) )
            	        {
            	            alt19 = 1;
            	        }


            	    }


            	    switch (alt19) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:94:20: ',' NAME
            			    {
            			    	char_literal84=(IToken)Match(input,26,FOLLOW_26_in_namelist519); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal84_tree = (object)adaptor.Create(char_literal84);
            			    		adaptor.AddChild(root_0, char_literal84_tree);
            			    	}
            			    	NAME85=(IToken)Match(input,NAME,FOLLOW_NAME_in_namelist521); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{NAME85_tree = (object)adaptor.Create(NAME85);
            			    		adaptor.AddChild(root_0, NAME85_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop19;
            	    }
            	} while (true);

            	loop19:
            		;	// Stops C# compiler whining that label 'loop19' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 16, namelist_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "namelist"

    public class explist1_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "explist1"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:1: explist1 : ( exp ',' )* exp ;
    public Lua2Parser.explist1_return explist1() // throws RecognitionException [1]
    {   
        Lua2Parser.explist1_return retval = new Lua2Parser.explist1_return();
        retval.Start = input.LT(1);
        int explist1_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal87 = null;
        Lua2Parser.exp_return exp86 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp88 = default(Lua2Parser.exp_return);


        object char_literal87_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 17) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:10: ( ( exp ',' )* exp )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:12: ( exp ',' )* exp
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:12: ( exp ',' )*
            	do 
            	{
            	    int alt20 = 2;
            	    alt20 = dfa20.Predict(input);
            	    switch (alt20) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:13: exp ','
            			    {
            			    	PushFollow(FOLLOW_exp_in_explist1533);
            			    	exp86 = exp();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp86.Tree);
            			    	char_literal87=(IToken)Match(input,26,FOLLOW_26_in_explist1535); if (state.failed) return retval;
            			    	if ( state.backtracking == 0 )
            			    	{char_literal87_tree = (object)adaptor.Create(char_literal87);
            			    		adaptor.AddChild(root_0, char_literal87_tree);
            			    	}

            			    }
            			    break;

            			default:
            			    goto loop20;
            	    }
            	} while (true);

            	loop20:
            		;	// Stops C# compiler whining that label 'loop20' has no statements

            	PushFollow(FOLLOW_exp_in_explist1539);
            	exp88 = exp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp88.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 17, explist1_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "explist1"

    public class exp_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "exp"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:98:1: exp : ( ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp ) ( binop exp )* ) ;
    public Lua2Parser.exp_return exp() // throws RecognitionException [1]
    {   
        Lua2Parser.exp_return retval = new Lua2Parser.exp_return();
        retval.Start = input.LT(1);
        int exp_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal89 = null;
        IToken string_literal90 = null;
        IToken string_literal91 = null;
        IToken string_literal94 = null;
        Lua2Parser.number_return number92 = default(Lua2Parser.number_return);

        Lua2Parser.stringToken_return stringToken93 = default(Lua2Parser.stringToken_return);

        Lua2Parser.function_return function95 = default(Lua2Parser.function_return);

        Lua2Parser.prefixexp_return prefixexp96 = default(Lua2Parser.prefixexp_return);

        Lua2Parser.tableconstructor_return tableconstructor97 = default(Lua2Parser.tableconstructor_return);

        Lua2Parser.unop_return unop98 = default(Lua2Parser.unop_return);

        Lua2Parser.exp_return exp99 = default(Lua2Parser.exp_return);

        Lua2Parser.binop_return binop100 = default(Lua2Parser.binop_return);

        Lua2Parser.exp_return exp101 = default(Lua2Parser.exp_return);


        object string_literal89_tree=null;
        object string_literal90_tree=null;
        object string_literal91_tree=null;
        object string_literal94_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 18) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:98:5: ( ( ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp ) ( binop exp )* ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:98:7: ( ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp ) ( binop exp )* )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:98:7: ( ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp ) ( binop exp )* )
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:99:4: ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp ) ( binop exp )*
            	{
            		// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:99:4: ( 'nil' | 'false' | 'true' | number | stringToken | '...' | function | prefixexp | tableconstructor | unop exp )
            		int alt21 = 10;
            		switch ( input.LA(1) ) 
            		{
            		case 41:
            			{
            		    alt21 = 1;
            		    }
            		    break;
            		case 42:
            			{
            		    alt21 = 2;
            		    }
            		    break;
            		case 43:
            			{
            		    alt21 = 3;
            		    }
            		    break;
            		case INT:
            		case FLOAT:
            		case EXP:
            		case HEX:
            			{
            		    alt21 = 4;
            		    }
            		    break;
            		case NORMALSTRING:
            		case CHARSTRING:
            		case LONGSTRING:
            			{
            		    alt21 = 5;
            		    }
            		    break;
            		case 44:
            			{
            		    alt21 = 6;
            		    }
            		    break;
            		case 24:
            			{
            		    alt21 = 7;
            		    }
            		    break;
            		case NAME:
            		case 60:
            			{
            		    alt21 = 8;
            		    }
            		    break;
            		case 64:
            			{
            		    alt21 = 9;
            		    }
            		    break;
            		case 46:
            		case 66:
            		case 67:
            			{
            		    alt21 = 10;
            		    }
            		    break;
            			default:
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            			    NoViableAltException nvae_d21s0 =
            			        new NoViableAltException("", 21, 0, input);

            			    throw nvae_d21s0;
            		}

            		switch (alt21) 
            		{
            		    case 1 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:99:6: 'nil'
            		        {
            		        	string_literal89=(IToken)Match(input,41,FOLLOW_41_in_exp555); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{string_literal89_tree = (object)adaptor.Create(string_literal89);
            		        		adaptor.AddChild(root_0, string_literal89_tree);
            		        	}

            		        }
            		        break;
            		    case 2 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:100:6: 'false'
            		        {
            		        	string_literal90=(IToken)Match(input,42,FOLLOW_42_in_exp562); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{string_literal90_tree = (object)adaptor.Create(string_literal90);
            		        		adaptor.AddChild(root_0, string_literal90_tree);
            		        	}

            		        }
            		        break;
            		    case 3 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:101:6: 'true'
            		        {
            		        	string_literal91=(IToken)Match(input,43,FOLLOW_43_in_exp569); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{string_literal91_tree = (object)adaptor.Create(string_literal91);
            		        		adaptor.AddChild(root_0, string_literal91_tree);
            		        	}

            		        }
            		        break;
            		    case 4 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:102:6: number
            		        {
            		        	PushFollow(FOLLOW_number_in_exp576);
            		        	number92 = number();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, number92.Tree);

            		        }
            		        break;
            		    case 5 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:103:6: stringToken
            		        {
            		        	PushFollow(FOLLOW_stringToken_in_exp583);
            		        	stringToken93 = stringToken();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, stringToken93.Tree);

            		        }
            		        break;
            		    case 6 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:104:6: '...'
            		        {
            		        	string_literal94=(IToken)Match(input,44,FOLLOW_44_in_exp590); if (state.failed) return retval;
            		        	if ( state.backtracking == 0 )
            		        	{string_literal94_tree = (object)adaptor.Create(string_literal94);
            		        		adaptor.AddChild(root_0, string_literal94_tree);
            		        	}

            		        }
            		        break;
            		    case 7 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:105:6: function
            		        {
            		        	PushFollow(FOLLOW_function_in_exp597);
            		        	function95 = function();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, function95.Tree);

            		        }
            		        break;
            		    case 8 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:106:6: prefixexp
            		        {
            		        	PushFollow(FOLLOW_prefixexp_in_exp604);
            		        	prefixexp96 = prefixexp();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, prefixexp96.Tree);

            		        }
            		        break;
            		    case 9 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:107:6: tableconstructor
            		        {
            		        	PushFollow(FOLLOW_tableconstructor_in_exp611);
            		        	tableconstructor97 = tableconstructor();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, tableconstructor97.Tree);

            		        }
            		        break;
            		    case 10 :
            		        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:108:6: unop exp
            		        {
            		        	PushFollow(FOLLOW_unop_in_exp618);
            		        	unop98 = unop();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, unop98.Tree);
            		        	PushFollow(FOLLOW_exp_in_exp620);
            		        	exp99 = exp();
            		        	state.followingStackPointer--;
            		        	if (state.failed) return retval;
            		        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp99.Tree);

            		        }
            		        break;

            		}

            		// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:108:19: ( binop exp )*
            		do 
            		{
            		    int alt22 = 2;
            		    int LA22_0 = input.LA(1);

            		    if ( ((LA22_0 >= 45 && LA22_0 <= 59)) )
            		    {
            		        int LA22_2 = input.LA(2);

            		        if ( (synpred37_Lua2()) )
            		        {
            		            alt22 = 1;
            		        }


            		    }


            		    switch (alt22) 
            			{
            				case 1 :
            				    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:108:20: binop exp
            				    {
            				    	PushFollow(FOLLOW_binop_in_exp627);
            				    	binop100 = binop();
            				    	state.followingStackPointer--;
            				    	if (state.failed) return retval;
            				    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, binop100.Tree);
            				    	PushFollow(FOLLOW_exp_in_exp629);
            				    	exp101 = exp();
            				    	state.followingStackPointer--;
            				    	if (state.failed) return retval;
            				    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp101.Tree);

            				    }
            				    break;

            				default:
            				    goto loop22;
            		    }
            		} while (true);

            		loop22:
            			;	// Stops C# compiler whining that label 'loop22' has no statements


            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 18, exp_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "exp"

    public class binop_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "binop"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:110:1: binop : ( '+' | '-' | '*' | '/' | '^' | '%' | '..' | '<' | '<=' | '>' | '>=' | '==' | '~=' | 'and' | 'or' ) ;
    public Lua2Parser.binop_return binop() // throws RecognitionException [1]
    {   
        Lua2Parser.binop_return retval = new Lua2Parser.binop_return();
        retval.Start = input.LT(1);
        int binop_StartIndex = input.Index();
        object root_0 = null;

        IToken set102 = null;

        object set102_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 19) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:110:7: ( ( '+' | '-' | '*' | '/' | '^' | '%' | '..' | '<' | '<=' | '>' | '>=' | '==' | '~=' | 'and' | 'or' ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:110:9: ( '+' | '-' | '*' | '/' | '^' | '%' | '..' | '<' | '<=' | '>' | '>=' | '==' | '~=' | 'and' | 'or' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set102 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= 45 && input.LA(1) <= 59) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set102));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 19, binop_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "binop"

    public class var_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "var"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:1: var : ( NAME | '(' exp ')' varSuffix ) ( varSuffix )* ;
    public Lua2Parser.var_return var() // throws RecognitionException [1]
    {   
        Lua2Parser.var_return retval = new Lua2Parser.var_return();
        retval.Start = input.LT(1);
        int var_StartIndex = input.Index();
        object root_0 = null;

        IToken NAME103 = null;
        IToken char_literal104 = null;
        IToken char_literal106 = null;
        Lua2Parser.exp_return exp105 = default(Lua2Parser.exp_return);

        Lua2Parser.varSuffix_return varSuffix107 = default(Lua2Parser.varSuffix_return);

        Lua2Parser.varSuffix_return varSuffix108 = default(Lua2Parser.varSuffix_return);


        object NAME103_tree=null;
        object char_literal104_tree=null;
        object char_literal106_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 20) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:5: ( ( NAME | '(' exp ')' varSuffix ) ( varSuffix )* )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:7: ( NAME | '(' exp ')' varSuffix ) ( varSuffix )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:7: ( NAME | '(' exp ')' varSuffix )
            	int alt23 = 2;
            	int LA23_0 = input.LA(1);

            	if ( (LA23_0 == NAME) )
            	{
            	    alt23 = 1;
            	}
            	else if ( (LA23_0 == 60) )
            	{
            	    alt23 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d23s0 =
            	        new NoViableAltException("", 23, 0, input);

            	    throw nvae_d23s0;
            	}
            	switch (alt23) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:9: NAME
            	        {
            	        	NAME103=(IToken)Match(input,NAME,FOLLOW_NAME_in_var711); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{NAME103_tree = (object)adaptor.Create(NAME103);
            	        		adaptor.AddChild(root_0, NAME103_tree);
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:16: '(' exp ')' varSuffix
            	        {
            	        	char_literal104=(IToken)Match(input,60,FOLLOW_60_in_var715); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal104_tree = (object)adaptor.Create(char_literal104);
            	        		adaptor.AddChild(root_0, char_literal104_tree);
            	        	}
            	        	PushFollow(FOLLOW_exp_in_var717);
            	        	exp105 = exp();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp105.Tree);
            	        	char_literal106=(IToken)Match(input,61,FOLLOW_61_in_var719); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal106_tree = (object)adaptor.Create(char_literal106);
            	        		adaptor.AddChild(root_0, char_literal106_tree);
            	        	}
            	        	PushFollow(FOLLOW_varSuffix_in_var721);
            	        	varSuffix107 = varSuffix();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, varSuffix107.Tree);

            	        }
            	        break;

            	}

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:40: ( varSuffix )*
            	do 
            	{
            	    int alt24 = 2;
            	    alt24 = dfa24.Predict(input);
            	    switch (alt24) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:42: varSuffix
            			    {
            			    	PushFollow(FOLLOW_varSuffix_in_var727);
            			    	varSuffix108 = varSuffix();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, varSuffix108.Tree);

            			    }
            			    break;

            			default:
            			    goto loop24;
            	    }
            	} while (true);

            	loop24:
            		;	// Stops C# compiler whining that label 'loop24' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 20, var_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "var"

    public class prefixexp_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "prefixexp"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:1: prefixexp : varOrExp ( nameAndArgs )* ;
    public Lua2Parser.prefixexp_return prefixexp() // throws RecognitionException [1]
    {   
        Lua2Parser.prefixexp_return retval = new Lua2Parser.prefixexp_return();
        retval.Start = input.LT(1);
        int prefixexp_StartIndex = input.Index();
        object root_0 = null;

        Lua2Parser.varOrExp_return varOrExp109 = default(Lua2Parser.varOrExp_return);

        Lua2Parser.nameAndArgs_return nameAndArgs110 = default(Lua2Parser.nameAndArgs_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 21) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:11: ( varOrExp ( nameAndArgs )* )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:13: varOrExp ( nameAndArgs )*
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_varOrExp_in_prefixexp739);
            	varOrExp109 = varOrExp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, varOrExp109.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:22: ( nameAndArgs )*
            	do 
            	{
            	    int alt25 = 2;
            	    alt25 = dfa25.Predict(input);
            	    switch (alt25) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:23: nameAndArgs
            			    {
            			    	PushFollow(FOLLOW_nameAndArgs_in_prefixexp742);
            			    	nameAndArgs110 = nameAndArgs();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, nameAndArgs110.Tree);

            			    }
            			    break;

            			default:
            			    goto loop25;
            	    }
            	} while (true);

            	loop25:
            		;	// Stops C# compiler whining that label 'loop25' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 21, prefixexp_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "prefixexp"

    public class functioncall_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "functioncall"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:1: functioncall : varOrExp ( nameAndArgs )+ ;
    public Lua2Parser.functioncall_return functioncall() // throws RecognitionException [1]
    {   
        Lua2Parser.functioncall_return retval = new Lua2Parser.functioncall_return();
        retval.Start = input.LT(1);
        int functioncall_StartIndex = input.Index();
        object root_0 = null;

        Lua2Parser.varOrExp_return varOrExp111 = default(Lua2Parser.varOrExp_return);

        Lua2Parser.nameAndArgs_return nameAndArgs112 = default(Lua2Parser.nameAndArgs_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 22) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:13: ( varOrExp ( nameAndArgs )+ )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:15: varOrExp ( nameAndArgs )+
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_varOrExp_in_functioncall752);
            	varOrExp111 = varOrExp();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, varOrExp111.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:24: ( nameAndArgs )+
            	int cnt26 = 0;
            	do 
            	{
            	    int alt26 = 2;
            	    alt26 = dfa26.Predict(input);
            	    switch (alt26) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:0:0: nameAndArgs
            			    {
            			    	PushFollow(FOLLOW_nameAndArgs_in_functioncall754);
            			    	nameAndArgs112 = nameAndArgs();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, nameAndArgs112.Tree);

            			    }
            			    break;

            			default:
            			    if ( cnt26 >= 1 ) goto loop26;
            			    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            		            EarlyExitException eee26 =
            		                new EarlyExitException(26, input);
            		            throw eee26;
            	    }
            	    cnt26++;
            	} while (true);

            	loop26:
            		;	// Stops C# compiler whining that label 'loop26' has no statements


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 22, functioncall_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "functioncall"

    public class varOrExp_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "varOrExp"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:1: varOrExp : ( var | '(' exp ')' );
    public Lua2Parser.varOrExp_return varOrExp() // throws RecognitionException [1]
    {   
        Lua2Parser.varOrExp_return retval = new Lua2Parser.varOrExp_return();
        retval.Start = input.LT(1);
        int varOrExp_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal114 = null;
        IToken char_literal116 = null;
        Lua2Parser.var_return var113 = default(Lua2Parser.var_return);

        Lua2Parser.exp_return exp115 = default(Lua2Parser.exp_return);


        object char_literal114_tree=null;
        object char_literal116_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 23) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:10: ( var | '(' exp ')' )
            int alt27 = 2;
            int LA27_0 = input.LA(1);

            if ( (LA27_0 == NAME) )
            {
                alt27 = 1;
            }
            else if ( (LA27_0 == 60) )
            {
                int LA27_2 = input.LA(2);

                if ( (synpred56_Lua2()) )
                {
                    alt27 = 1;
                }
                else if ( (true) )
                {
                    alt27 = 2;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d27s2 =
                        new NoViableAltException("", 27, 2, input);

                    throw nvae_d27s2;
                }
            }
            else 
            {
                if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                NoViableAltException nvae_d27s0 =
                    new NoViableAltException("", 27, 0, input);

                throw nvae_d27s0;
            }
            switch (alt27) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:12: var
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_var_in_varOrExp763);
                    	var113 = var();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, var113.Tree);

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:18: '(' exp ')'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal114=(IToken)Match(input,60,FOLLOW_60_in_varOrExp767); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal114_tree = (object)adaptor.Create(char_literal114);
                    		adaptor.AddChild(root_0, char_literal114_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_varOrExp769);
                    	exp115 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp115.Tree);
                    	char_literal116=(IToken)Match(input,61,FOLLOW_61_in_varOrExp771); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal116_tree = (object)adaptor.Create(char_literal116);
                    		adaptor.AddChild(root_0, char_literal116_tree);
                    	}

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 23, varOrExp_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "varOrExp"

    public class nameAndArgs_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "nameAndArgs"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:120:1: nameAndArgs : ( ':' NAME )? args ;
    public Lua2Parser.nameAndArgs_return nameAndArgs() // throws RecognitionException [1]
    {   
        Lua2Parser.nameAndArgs_return retval = new Lua2Parser.nameAndArgs_return();
        retval.Start = input.LT(1);
        int nameAndArgs_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal117 = null;
        IToken NAME118 = null;
        Lua2Parser.args_return args119 = default(Lua2Parser.args_return);


        object char_literal117_tree=null;
        object NAME118_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 24) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:120:13: ( ( ':' NAME )? args )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:120:15: ( ':' NAME )? args
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:120:15: ( ':' NAME )?
            	int alt28 = 2;
            	int LA28_0 = input.LA(1);

            	if ( (LA28_0 == 40) )
            	{
            	    alt28 = 1;
            	}
            	switch (alt28) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:120:16: ':' NAME
            	        {
            	        	char_literal117=(IToken)Match(input,40,FOLLOW_40_in_nameAndArgs781); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal117_tree = (object)adaptor.Create(char_literal117);
            	        		adaptor.AddChild(root_0, char_literal117_tree);
            	        	}
            	        	NAME118=(IToken)Match(input,NAME,FOLLOW_NAME_in_nameAndArgs783); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{NAME118_tree = (object)adaptor.Create(NAME118);
            	        		adaptor.AddChild(root_0, NAME118_tree);
            	        	}

            	        }
            	        break;

            	}

            	PushFollow(FOLLOW_args_in_nameAndArgs788);
            	args119 = args();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, args119.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 24, nameAndArgs_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "nameAndArgs"

    public class varSuffix_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "varSuffix"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:1: varSuffix : ( nameAndArgs )* ( '[' exp ']' | ( '.' NAME ) ) ;
    public Lua2Parser.varSuffix_return varSuffix() // throws RecognitionException [1]
    {   
        Lua2Parser.varSuffix_return retval = new Lua2Parser.varSuffix_return();
        retval.Start = input.LT(1);
        int varSuffix_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal121 = null;
        IToken char_literal123 = null;
        IToken char_literal124 = null;
        IToken NAME125 = null;
        Lua2Parser.nameAndArgs_return nameAndArgs120 = default(Lua2Parser.nameAndArgs_return);

        Lua2Parser.exp_return exp122 = default(Lua2Parser.exp_return);


        object char_literal121_tree=null;
        object char_literal123_tree=null;
        object char_literal124_tree=null;
        object NAME125_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 25) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:11: ( ( nameAndArgs )* ( '[' exp ']' | ( '.' NAME ) ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:13: ( nameAndArgs )* ( '[' exp ']' | ( '.' NAME ) )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:13: ( nameAndArgs )*
            	do 
            	{
            	    int alt29 = 2;
            	    int LA29_0 = input.LA(1);

            	    if ( ((LA29_0 >= NORMALSTRING && LA29_0 <= LONGSTRING) || LA29_0 == 40 || LA29_0 == 60 || LA29_0 == 64) )
            	    {
            	        alt29 = 1;
            	    }


            	    switch (alt29) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:14: nameAndArgs
            			    {
            			    	PushFollow(FOLLOW_nameAndArgs_in_varSuffix799);
            			    	nameAndArgs120 = nameAndArgs();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, nameAndArgs120.Tree);

            			    }
            			    break;

            			default:
            			    goto loop29;
            	    }
            	} while (true);

            	loop29:
            		;	// Stops C# compiler whining that label 'loop29' has no statements

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:28: ( '[' exp ']' | ( '.' NAME ) )
            	int alt30 = 2;
            	int LA30_0 = input.LA(1);

            	if ( (LA30_0 == 62) )
            	{
            	    alt30 = 1;
            	}
            	else if ( (LA30_0 == 39) )
            	{
            	    alt30 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d30s0 =
            	        new NoViableAltException("", 30, 0, input);

            	    throw nvae_d30s0;
            	}
            	switch (alt30) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:30: '[' exp ']'
            	        {
            	        	char_literal121=(IToken)Match(input,62,FOLLOW_62_in_varSuffix805); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal121_tree = (object)adaptor.Create(char_literal121);
            	        		adaptor.AddChild(root_0, char_literal121_tree);
            	        	}
            	        	PushFollow(FOLLOW_exp_in_varSuffix807);
            	        	exp122 = exp();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp122.Tree);
            	        	char_literal123=(IToken)Match(input,63,FOLLOW_63_in_varSuffix809); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{char_literal123_tree = (object)adaptor.Create(char_literal123);
            	        		adaptor.AddChild(root_0, char_literal123_tree);
            	        	}

            	        }
            	        break;
            	    case 2 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:44: ( '.' NAME )
            	        {
            	        	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:44: ( '.' NAME )
            	        	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:122:45: '.' NAME
            	        	{
            	        		char_literal124=(IToken)Match(input,39,FOLLOW_39_in_varSuffix814); if (state.failed) return retval;
            	        		if ( state.backtracking == 0 )
            	        		{char_literal124_tree = (object)adaptor.Create(char_literal124);
            	        			adaptor.AddChild(root_0, char_literal124_tree);
            	        		}
            	        		NAME125=(IToken)Match(input,NAME,FOLLOW_NAME_in_varSuffix816); if (state.failed) return retval;
            	        		if ( state.backtracking == 0 )
            	        		{NAME125_tree = (object)adaptor.Create(NAME125);
            	        			adaptor.AddChild(root_0, NAME125_tree);
            	        		}

            	        	}


            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 25, varSuffix_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "varSuffix"

    public class args_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "args"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:1: args : ( '(' ( explist1 )? ')' | tableconstructor | stringToken );
    public Lua2Parser.args_return args() // throws RecognitionException [1]
    {   
        Lua2Parser.args_return retval = new Lua2Parser.args_return();
        retval.Start = input.LT(1);
        int args_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal126 = null;
        IToken char_literal128 = null;
        Lua2Parser.explist1_return explist1127 = default(Lua2Parser.explist1_return);

        Lua2Parser.tableconstructor_return tableconstructor129 = default(Lua2Parser.tableconstructor_return);

        Lua2Parser.stringToken_return stringToken130 = default(Lua2Parser.stringToken_return);


        object char_literal126_tree=null;
        object char_literal128_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 26) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:6: ( '(' ( explist1 )? ')' | tableconstructor | stringToken )
            int alt32 = 3;
            switch ( input.LA(1) ) 
            {
            case 60:
            	{
                alt32 = 1;
                }
                break;
            case 64:
            	{
                alt32 = 2;
                }
                break;
            case NORMALSTRING:
            case CHARSTRING:
            case LONGSTRING:
            	{
                alt32 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d32s0 =
            	        new NoViableAltException("", 32, 0, input);

            	    throw nvae_d32s0;
            }

            switch (alt32) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:9: '(' ( explist1 )? ')'
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal126=(IToken)Match(input,60,FOLLOW_60_in_args829); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal126_tree = (object)adaptor.Create(char_literal126);
                    		adaptor.AddChild(root_0, char_literal126_tree);
                    	}
                    	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:13: ( explist1 )?
                    	int alt31 = 2;
                    	int LA31_0 = input.LA(1);

                    	if ( ((LA31_0 >= NAME && LA31_0 <= LONGSTRING) || LA31_0 == 24 || (LA31_0 >= 41 && LA31_0 <= 44) || LA31_0 == 46 || LA31_0 == 60 || LA31_0 == 64 || (LA31_0 >= 66 && LA31_0 <= 67)) )
                    	{
                    	    alt31 = 1;
                    	}
                    	switch (alt31) 
                    	{
                    	    case 1 :
                    	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:14: explist1
                    	        {
                    	        	PushFollow(FOLLOW_explist1_in_args832);
                    	        	explist1127 = explist1();
                    	        	state.followingStackPointer--;
                    	        	if (state.failed) return retval;
                    	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, explist1127.Tree);

                    	        }
                    	        break;

                    	}

                    	char_literal128=(IToken)Match(input,61,FOLLOW_61_in_args836); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal128_tree = (object)adaptor.Create(char_literal128);
                    		adaptor.AddChild(root_0, char_literal128_tree);
                    	}

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:31: tableconstructor
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_tableconstructor_in_args840);
                    	tableconstructor129 = tableconstructor();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, tableconstructor129.Tree);

                    }
                    break;
                case 3 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:124:50: stringToken
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_stringToken_in_args844);
                    	stringToken130 = stringToken();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, stringToken130.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 26, args_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "args"

    public class function_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "function"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:126:1: function : 'function' func_body ;
    public Lua2Parser.function_return function() // throws RecognitionException [1]
    {   
        Lua2Parser.function_return retval = new Lua2Parser.function_return();
        retval.Start = input.LT(1);
        int function_StartIndex = input.Index();
        object root_0 = null;

        IToken string_literal131 = null;
        Lua2Parser.func_body_return func_body132 = default(Lua2Parser.func_body_return);


        object string_literal131_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 27) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:126:10: ( 'function' func_body )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:126:12: 'function' func_body
            {
            	root_0 = (object)adaptor.GetNilNode();

            	string_literal131=(IToken)Match(input,24,FOLLOW_24_in_function853); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal131_tree = (object)adaptor.Create(string_literal131);
            		adaptor.AddChild(root_0, string_literal131_tree);
            	}
            	PushFollow(FOLLOW_func_body_in_function855);
            	func_body132 = func_body();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, func_body132.Tree);

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 27, function_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "function"

    public class func_body_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "func_body"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:128:1: func_body : '(' ( func_parlist )? ')' block 'end' ;
    public Lua2Parser.func_body_return func_body() // throws RecognitionException [1]
    {   
        Lua2Parser.func_body_return retval = new Lua2Parser.func_body_return();
        retval.Start = input.LT(1);
        int func_body_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal133 = null;
        IToken char_literal135 = null;
        IToken string_literal137 = null;
        Lua2Parser.func_parlist_return func_parlist134 = default(Lua2Parser.func_parlist_return);

        Lua2Parser.block_return block136 = default(Lua2Parser.block_return);


        object char_literal133_tree=null;
        object char_literal135_tree=null;
        object string_literal137_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 28) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:128:11: ( '(' ( func_parlist )? ')' block 'end' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:128:13: '(' ( func_parlist )? ')' block 'end'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	char_literal133=(IToken)Match(input,60,FOLLOW_60_in_func_body864); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal133_tree = (object)adaptor.Create(char_literal133);
            		adaptor.AddChild(root_0, char_literal133_tree);
            	}
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:128:17: ( func_parlist )?
            	int alt33 = 2;
            	int LA33_0 = input.LA(1);

            	if ( (LA33_0 == NAME || LA33_0 == 44) )
            	{
            	    alt33 = 1;
            	}
            	switch (alt33) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:128:18: func_parlist
            	        {
            	        	PushFollow(FOLLOW_func_parlist_in_func_body867);
            	        	func_parlist134 = func_parlist();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, func_parlist134.Tree);

            	        }
            	        break;

            	}

            	char_literal135=(IToken)Match(input,61,FOLLOW_61_in_func_body872); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal135_tree = (object)adaptor.Create(char_literal135);
            		adaptor.AddChild(root_0, char_literal135_tree);
            	}
            	PushFollow(FOLLOW_block_in_func_body874);
            	block136 = block();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, block136.Tree);
            	string_literal137=(IToken)Match(input,28,FOLLOW_28_in_func_body876); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{string_literal137_tree = (object)adaptor.Create(string_literal137);
            		adaptor.AddChild(root_0, string_literal137_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 28, func_body_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "func_body"

    public class func_parlist_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "func_parlist"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:1: func_parlist : ( namelist ( ',' '...' )? | '...' ) ;
    public Lua2Parser.func_parlist_return func_parlist() // throws RecognitionException [1]
    {   
        Lua2Parser.func_parlist_return retval = new Lua2Parser.func_parlist_return();
        retval.Start = input.LT(1);
        int func_parlist_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal139 = null;
        IToken string_literal140 = null;
        IToken string_literal141 = null;
        Lua2Parser.namelist_return namelist138 = default(Lua2Parser.namelist_return);


        object char_literal139_tree=null;
        object string_literal140_tree=null;
        object string_literal141_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 29) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:14: ( ( namelist ( ',' '...' )? | '...' ) )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:15: ( namelist ( ',' '...' )? | '...' )
            {
            	root_0 = (object)adaptor.GetNilNode();

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:15: ( namelist ( ',' '...' )? | '...' )
            	int alt35 = 2;
            	int LA35_0 = input.LA(1);

            	if ( (LA35_0 == NAME) )
            	{
            	    alt35 = 1;
            	}
            	else if ( (LA35_0 == 44) )
            	{
            	    alt35 = 2;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d35s0 =
            	        new NoViableAltException("", 35, 0, input);

            	    throw nvae_d35s0;
            	}
            	switch (alt35) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:16: namelist ( ',' '...' )?
            	        {
            	        	PushFollow(FOLLOW_namelist_in_func_parlist885);
            	        	namelist138 = namelist();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, namelist138.Tree);
            	        	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:25: ( ',' '...' )?
            	        	int alt34 = 2;
            	        	int LA34_0 = input.LA(1);

            	        	if ( (LA34_0 == 26) )
            	        	{
            	        	    alt34 = 1;
            	        	}
            	        	switch (alt34) 
            	        	{
            	        	    case 1 :
            	        	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:26: ',' '...'
            	        	        {
            	        	        	char_literal139=(IToken)Match(input,26,FOLLOW_26_in_func_parlist888); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{char_literal139_tree = (object)adaptor.Create(char_literal139);
            	        	        		adaptor.AddChild(root_0, char_literal139_tree);
            	        	        	}
            	        	        	string_literal140=(IToken)Match(input,44,FOLLOW_44_in_func_parlist890); if (state.failed) return retval;
            	        	        	if ( state.backtracking == 0 )
            	        	        	{string_literal140_tree = (object)adaptor.Create(string_literal140);
            	        	        		adaptor.AddChild(root_0, string_literal140_tree);
            	        	        	}

            	        	        }
            	        	        break;

            	        	}


            	        }
            	        break;
            	    case 2 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:130:41: '...'
            	        {
            	        	string_literal141=(IToken)Match(input,44,FOLLOW_44_in_func_parlist897); if (state.failed) return retval;
            	        	if ( state.backtracking == 0 )
            	        	{string_literal141_tree = (object)adaptor.Create(string_literal141);
            	        		adaptor.AddChild(root_0, string_literal141_tree);
            	        	}

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 29, func_parlist_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "func_parlist"

    public class tableconstructor_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "tableconstructor"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:132:1: tableconstructor : '{' ( fieldlist )? '}' ;
    public Lua2Parser.tableconstructor_return tableconstructor() // throws RecognitionException [1]
    {   
        Lua2Parser.tableconstructor_return retval = new Lua2Parser.tableconstructor_return();
        retval.Start = input.LT(1);
        int tableconstructor_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal142 = null;
        IToken char_literal144 = null;
        Lua2Parser.fieldlist_return fieldlist143 = default(Lua2Parser.fieldlist_return);


        object char_literal142_tree=null;
        object char_literal144_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 30) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:132:18: ( '{' ( fieldlist )? '}' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:132:20: '{' ( fieldlist )? '}'
            {
            	root_0 = (object)adaptor.GetNilNode();

            	char_literal142=(IToken)Match(input,64,FOLLOW_64_in_tableconstructor908); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal142_tree = (object)adaptor.Create(char_literal142);
            		adaptor.AddChild(root_0, char_literal142_tree);
            	}
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:132:24: ( fieldlist )?
            	int alt36 = 2;
            	int LA36_0 = input.LA(1);

            	if ( ((LA36_0 >= NAME && LA36_0 <= LONGSTRING) || LA36_0 == 24 || (LA36_0 >= 41 && LA36_0 <= 44) || LA36_0 == 46 || LA36_0 == 60 || LA36_0 == 62 || LA36_0 == 64 || (LA36_0 >= 66 && LA36_0 <= 67)) )
            	{
            	    alt36 = 1;
            	}
            	switch (alt36) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:132:25: fieldlist
            	        {
            	        	PushFollow(FOLLOW_fieldlist_in_tableconstructor911);
            	        	fieldlist143 = fieldlist();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, fieldlist143.Tree);

            	        }
            	        break;

            	}

            	char_literal144=(IToken)Match(input,65,FOLLOW_65_in_tableconstructor915); if (state.failed) return retval;
            	if ( state.backtracking == 0 )
            	{char_literal144_tree = (object)adaptor.Create(char_literal144);
            		adaptor.AddChild(root_0, char_literal144_tree);
            	}

            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 30, tableconstructor_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "tableconstructor"

    public class fieldlist_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "fieldlist"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:1: fieldlist : field ( fieldsep field )* ( fieldsep )? ;
    public Lua2Parser.fieldlist_return fieldlist() // throws RecognitionException [1]
    {   
        Lua2Parser.fieldlist_return retval = new Lua2Parser.fieldlist_return();
        retval.Start = input.LT(1);
        int fieldlist_StartIndex = input.Index();
        object root_0 = null;

        Lua2Parser.field_return field145 = default(Lua2Parser.field_return);

        Lua2Parser.fieldsep_return fieldsep146 = default(Lua2Parser.fieldsep_return);

        Lua2Parser.field_return field147 = default(Lua2Parser.field_return);

        Lua2Parser.fieldsep_return fieldsep148 = default(Lua2Parser.fieldsep_return);



        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 31) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:11: ( field ( fieldsep field )* ( fieldsep )? )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:13: field ( fieldsep field )* ( fieldsep )?
            {
            	root_0 = (object)adaptor.GetNilNode();

            	PushFollow(FOLLOW_field_in_fieldlist924);
            	field145 = field();
            	state.followingStackPointer--;
            	if (state.failed) return retval;
            	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, field145.Tree);
            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:19: ( fieldsep field )*
            	do 
            	{
            	    int alt37 = 2;
            	    int LA37_0 = input.LA(1);

            	    if ( (LA37_0 == 21 || LA37_0 == 26) )
            	    {
            	        int LA37_1 = input.LA(2);

            	        if ( ((LA37_1 >= NAME && LA37_1 <= LONGSTRING) || LA37_1 == 24 || (LA37_1 >= 41 && LA37_1 <= 44) || LA37_1 == 46 || LA37_1 == 60 || LA37_1 == 62 || LA37_1 == 64 || (LA37_1 >= 66 && LA37_1 <= 67)) )
            	        {
            	            alt37 = 1;
            	        }


            	    }


            	    switch (alt37) 
            		{
            			case 1 :
            			    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:20: fieldsep field
            			    {
            			    	PushFollow(FOLLOW_fieldsep_in_fieldlist927);
            			    	fieldsep146 = fieldsep();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, fieldsep146.Tree);
            			    	PushFollow(FOLLOW_field_in_fieldlist929);
            			    	field147 = field();
            			    	state.followingStackPointer--;
            			    	if (state.failed) return retval;
            			    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, field147.Tree);

            			    }
            			    break;

            			default:
            			    goto loop37;
            	    }
            	} while (true);

            	loop37:
            		;	// Stops C# compiler whining that label 'loop37' has no statements

            	// X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:38: ( fieldsep )?
            	int alt38 = 2;
            	int LA38_0 = input.LA(1);

            	if ( (LA38_0 == 21 || LA38_0 == 26) )
            	{
            	    alt38 = 1;
            	}
            	switch (alt38) 
            	{
            	    case 1 :
            	        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:134:39: fieldsep
            	        {
            	        	PushFollow(FOLLOW_fieldsep_in_fieldlist935);
            	        	fieldsep148 = fieldsep();
            	        	state.followingStackPointer--;
            	        	if (state.failed) return retval;
            	        	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, fieldsep148.Tree);

            	        }
            	        break;

            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 31, fieldlist_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "fieldlist"

    public class field_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "field"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:136:1: field : ( '[' exp ']' '=' exp | NAME '=' exp | exp );
    public Lua2Parser.field_return field() // throws RecognitionException [1]
    {   
        Lua2Parser.field_return retval = new Lua2Parser.field_return();
        retval.Start = input.LT(1);
        int field_StartIndex = input.Index();
        object root_0 = null;

        IToken char_literal149 = null;
        IToken char_literal151 = null;
        IToken char_literal152 = null;
        IToken NAME154 = null;
        IToken char_literal155 = null;
        Lua2Parser.exp_return exp150 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp153 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp156 = default(Lua2Parser.exp_return);

        Lua2Parser.exp_return exp157 = default(Lua2Parser.exp_return);


        object char_literal149_tree=null;
        object char_literal151_tree=null;
        object char_literal152_tree=null;
        object NAME154_tree=null;
        object char_literal155_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 32) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:136:7: ( '[' exp ']' '=' exp | NAME '=' exp | exp )
            int alt39 = 3;
            switch ( input.LA(1) ) 
            {
            case 62:
            	{
                alt39 = 1;
                }
                break;
            case NAME:
            	{
                int LA39_2 = input.LA(2);

                if ( (LA39_2 == 23) )
                {
                    alt39 = 2;
                }
                else if ( (LA39_2 == EOF || (LA39_2 >= NORMALSTRING && LA39_2 <= LONGSTRING) || LA39_2 == 21 || LA39_2 == 26 || (LA39_2 >= 39 && LA39_2 <= 40) || (LA39_2 >= 45 && LA39_2 <= 60) || LA39_2 == 62 || (LA39_2 >= 64 && LA39_2 <= 65)) )
                {
                    alt39 = 3;
                }
                else 
                {
                    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
                    NoViableAltException nvae_d39s2 =
                        new NoViableAltException("", 39, 2, input);

                    throw nvae_d39s2;
                }
                }
                break;
            case INT:
            case FLOAT:
            case EXP:
            case HEX:
            case NORMALSTRING:
            case CHARSTRING:
            case LONGSTRING:
            case 24:
            case 41:
            case 42:
            case 43:
            case 44:
            case 46:
            case 60:
            case 64:
            case 66:
            case 67:
            	{
                alt39 = 3;
                }
                break;
            	default:
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    NoViableAltException nvae_d39s0 =
            	        new NoViableAltException("", 39, 0, input);

            	    throw nvae_d39s0;
            }

            switch (alt39) 
            {
                case 1 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:136:9: '[' exp ']' '=' exp
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	char_literal149=(IToken)Match(input,62,FOLLOW_62_in_field945); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal149_tree = (object)adaptor.Create(char_literal149);
                    		adaptor.AddChild(root_0, char_literal149_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_field947);
                    	exp150 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp150.Tree);
                    	char_literal151=(IToken)Match(input,63,FOLLOW_63_in_field949); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal151_tree = (object)adaptor.Create(char_literal151);
                    		adaptor.AddChild(root_0, char_literal151_tree);
                    	}
                    	char_literal152=(IToken)Match(input,23,FOLLOW_23_in_field951); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal152_tree = (object)adaptor.Create(char_literal152);
                    		adaptor.AddChild(root_0, char_literal152_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_field953);
                    	exp153 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp153.Tree);

                    }
                    break;
                case 2 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:136:31: NAME '=' exp
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	NAME154=(IToken)Match(input,NAME,FOLLOW_NAME_in_field957); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{NAME154_tree = (object)adaptor.Create(NAME154);
                    		adaptor.AddChild(root_0, NAME154_tree);
                    	}
                    	char_literal155=(IToken)Match(input,23,FOLLOW_23_in_field959); if (state.failed) return retval;
                    	if ( state.backtracking == 0 )
                    	{char_literal155_tree = (object)adaptor.Create(char_literal155);
                    		adaptor.AddChild(root_0, char_literal155_tree);
                    	}
                    	PushFollow(FOLLOW_exp_in_field961);
                    	exp156 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp156.Tree);

                    }
                    break;
                case 3 :
                    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:136:46: exp
                    {
                    	root_0 = (object)adaptor.GetNilNode();

                    	PushFollow(FOLLOW_exp_in_field965);
                    	exp157 = exp();
                    	state.followingStackPointer--;
                    	if (state.failed) return retval;
                    	if ( state.backtracking == 0 ) adaptor.AddChild(root_0, exp157.Tree);

                    }
                    break;

            }
            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 32, field_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "field"

    public class fieldsep_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "fieldsep"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:138:1: fieldsep : ( ',' | ';' );
    public Lua2Parser.fieldsep_return fieldsep() // throws RecognitionException [1]
    {   
        Lua2Parser.fieldsep_return retval = new Lua2Parser.fieldsep_return();
        retval.Start = input.LT(1);
        int fieldsep_StartIndex = input.Index();
        object root_0 = null;

        IToken set158 = null;

        object set158_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 33) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:138:10: ( ',' | ';' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set158 = (IToken)input.LT(1);
            	if ( input.LA(1) == 21 || input.LA(1) == 26 ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set158));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 33, fieldsep_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "fieldsep"

    public class unop_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "unop"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:140:1: unop : ( '-' | 'not' | '#' );
    public Lua2Parser.unop_return unop() // throws RecognitionException [1]
    {   
        Lua2Parser.unop_return retval = new Lua2Parser.unop_return();
        retval.Start = input.LT(1);
        int unop_StartIndex = input.Index();
        object root_0 = null;

        IToken set159 = null;

        object set159_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 34) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:140:6: ( '-' | 'not' | '#' )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set159 = (IToken)input.LT(1);
            	if ( input.LA(1) == 46 || (input.LA(1) >= 66 && input.LA(1) <= 67) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set159));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 34, unop_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "unop"

    public class number_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "number"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:142:1: number : ( INT | FLOAT | EXP | HEX );
    public Lua2Parser.number_return number() // throws RecognitionException [1]
    {   
        Lua2Parser.number_return retval = new Lua2Parser.number_return();
        retval.Start = input.LT(1);
        int number_StartIndex = input.Index();
        object root_0 = null;

        IToken set160 = null;

        object set160_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 35) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:142:8: ( INT | FLOAT | EXP | HEX )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set160 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= INT && input.LA(1) <= HEX) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set160));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 35, number_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "number"

    public class stringToken_return : ParserRuleReturnScope
    {
        private object tree;
        override public object Tree
        {
        	get { return tree; }
        	set { tree = (object) value; }
        }
    };

    // $ANTLR start "stringToken"
    // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:144:1: stringToken : ( NORMALSTRING | CHARSTRING | LONGSTRING );
    public Lua2Parser.stringToken_return stringToken() // throws RecognitionException [1]
    {   
        Lua2Parser.stringToken_return retval = new Lua2Parser.stringToken_return();
        retval.Start = input.LT(1);
        int stringToken_StartIndex = input.Index();
        object root_0 = null;

        IToken set161 = null;

        object set161_tree=null;

        try 
    	{
    	    if ( (state.backtracking > 0) && AlreadyParsedRule(input, 36) ) 
    	    {
    	    	return retval; 
    	    }
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:144:13: ( NORMALSTRING | CHARSTRING | LONGSTRING )
            // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:
            {
            	root_0 = (object)adaptor.GetNilNode();

            	set161 = (IToken)input.LT(1);
            	if ( (input.LA(1) >= NORMALSTRING && input.LA(1) <= LONGSTRING) ) 
            	{
            	    input.Consume();
            	    if ( state.backtracking == 0 ) adaptor.AddChild(root_0, (object)adaptor.Create(set161));
            	    state.errorRecovery = false;state.failed = false;
            	}
            	else 
            	{
            	    if ( state.backtracking > 0 ) {state.failed = true; return retval;}
            	    MismatchedSetException mse = new MismatchedSetException(null,input);
            	    throw mse;
            	}


            }

            retval.Stop = input.LT(-1);

            if ( (state.backtracking==0) )
            {	retval.Tree = (object)adaptor.RulePostProcessing(root_0);
            	adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);}
        }
        catch (RecognitionException re) 
    	{
            ReportError(re);
            Recover(input,re);
    	// Conversion of the second argument necessary, but harmless
    	retval.Tree = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);

        }
        finally 
    	{
            if ( state.backtracking > 0 ) 
            {
            	Memoize(input, 36, stringToken_StartIndex); 
            }
        }
        return retval;
    }
    // $ANTLR end "stringToken"

    // $ANTLR start "synpred6_Lua2"
    public void synpred6_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:11: ( chunk )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:57:11: chunk
        {
        	PushFollow(FOLLOW_chunk_in_synpred6_Lua2183);
        	chunk();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred6_Lua2"

    // $ANTLR start "synpred7_Lua2"
    public void synpred7_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:59:9: ( var_assignment )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:59:9: var_assignment
        {
        	PushFollow(FOLLOW_var_assignment_in_synpred7_Lua2196);
        	var_assignment();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred7_Lua2"

    // $ANTLR start "synpred8_Lua2"
    public void synpred8_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:60:5: ( functioncall )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:60:5: functioncall
        {
        	PushFollow(FOLLOW_functioncall_in_synpred8_Lua2202);
        	functioncall();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred8_Lua2"

    // $ANTLR start "synpred14_Lua2"
    public void synpred14_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:66:5: ( func_definition )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:66:5: func_definition
        {
        	PushFollow(FOLLOW_func_definition_in_synpred14_Lua2238);
        	func_definition();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred14_Lua2"

    // $ANTLR start "synpred27_Lua2"
    public void synpred27_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:13: ( exp ',' )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:96:13: exp ','
        {
        	PushFollow(FOLLOW_exp_in_synpred27_Lua2533);
        	exp();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	Match(input,26,FOLLOW_26_in_synpred27_Lua2535); if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred27_Lua2"

    // $ANTLR start "synpred37_Lua2"
    public void synpred37_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:108:20: ( binop exp )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:108:20: binop exp
        {
        	PushFollow(FOLLOW_binop_in_synpred37_Lua2627);
        	binop();
        	state.followingStackPointer--;
        	if (state.failed) return ;
        	PushFollow(FOLLOW_exp_in_synpred37_Lua2629);
        	exp();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred37_Lua2"

    // $ANTLR start "synpred53_Lua2"
    public void synpred53_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:42: ( varSuffix )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:112:42: varSuffix
        {
        	PushFollow(FOLLOW_varSuffix_in_synpred53_Lua2727);
        	varSuffix();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred53_Lua2"

    // $ANTLR start "synpred54_Lua2"
    public void synpred54_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:23: ( nameAndArgs )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:114:23: nameAndArgs
        {
        	PushFollow(FOLLOW_nameAndArgs_in_synpred54_Lua2742);
        	nameAndArgs();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred54_Lua2"

    // $ANTLR start "synpred55_Lua2"
    public void synpred55_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:24: ( nameAndArgs )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:116:24: nameAndArgs
        {
        	PushFollow(FOLLOW_nameAndArgs_in_synpred55_Lua2754);
        	nameAndArgs();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred55_Lua2"

    // $ANTLR start "synpred56_Lua2"
    public void synpred56_Lua2_fragment() {
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:12: ( var )
        // X:\\Documents\\projects\\WOW developing\\Components\\PSLib.Parsing2\\PSLib.Parsing\\Lua\\Lua2.g:118:12: var
        {
        	PushFollow(FOLLOW_var_in_synpred56_Lua2763);
        	var();
        	state.followingStackPointer--;
        	if (state.failed) return ;

        }
    }
    // $ANTLR end "synpred56_Lua2"

    // Delegated rules

   	public bool synpred27_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred27_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred53_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred53_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred7_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred7_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred6_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred6_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred14_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred14_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred56_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred56_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred8_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred8_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred54_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred54_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred55_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred55_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}
   	public bool synpred37_Lua2() 
   	{
   	    state.backtracking++;
   	    int start = input.Mark();
   	    try 
   	    {
   	        synpred37_Lua2_fragment(); // can never throw exception
   	    }
   	    catch (RecognitionException re) 
   	    {
   	        Console.Error.WriteLine("impossible: "+re);
   	    }
   	    bool success = !state.failed;
   	    input.Rewind(start);
   	    state.backtracking--;
   	    state.failed = false;
   	    return success;
   	}


   	protected DFA7 dfa7;
   	protected DFA20 dfa20;
   	protected DFA24 dfa24;
   	protected DFA25 dfa25;
   	protected DFA26 dfa26;
	private void InitializeCyclicDFAs()
	{
    	this.dfa7 = new DFA7(this);
    	this.dfa20 = new DFA20(this);
    	this.dfa24 = new DFA24(this);
    	this.dfa25 = new DFA25(this);
    	this.dfa26 = new DFA26(this);
	    this.dfa7.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA7_SpecialStateTransition);
	    this.dfa20.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA20_SpecialStateTransition);
	    this.dfa24.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA24_SpecialStateTransition);
	    this.dfa25.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA25_SpecialStateTransition);
	    this.dfa26.specialStateTransitionHandler = new DFA.SpecialStateTransitionHandler(DFA26_SpecialStateTransition);
	}

    const string DFA7_eotS =
        "\x0d\uffff";
    const string DFA7_eofS =
        "\x0d\uffff";
    const string DFA7_minS =
        "\x01\x05\x02\x00\x05\uffff\x01\x00\x04\uffff";
    const string DFA7_maxS =
        "\x01\x3c\x02\x00\x05\uffff\x01\x00\x04\uffff";
    const string DFA7_acceptS =
        "\x03\uffff\x01\x03\x01\x04\x01\x05\x01\x06\x01\x07\x01\uffff\x01"+
        "\x08\x01\x01\x01\x02\x01\x09";
    const string DFA7_specialS =
        "\x01\uffff\x01\x00\x01\x01\x05\uffff\x01\x02\x04\uffff}>";
    static readonly string[] DFA7_transitionS = {
            "\x01\x01\x10\uffff\x01\x08\x01\uffff\x01\x09\x01\x07\x01\uffff"+
            "\x01\x03\x02\uffff\x01\x06\x05\uffff\x01\x05\x01\uffff\x01\x04"+
            "\x15\uffff\x01\x02",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA7_eot = DFA.UnpackEncodedString(DFA7_eotS);
    static readonly short[] DFA7_eof = DFA.UnpackEncodedString(DFA7_eofS);
    static readonly char[] DFA7_min = DFA.UnpackEncodedStringToUnsignedChars(DFA7_minS);
    static readonly char[] DFA7_max = DFA.UnpackEncodedStringToUnsignedChars(DFA7_maxS);
    static readonly short[] DFA7_accept = DFA.UnpackEncodedString(DFA7_acceptS);
    static readonly short[] DFA7_special = DFA.UnpackEncodedString(DFA7_specialS);
    static readonly short[][] DFA7_transition = DFA.UnpackEncodedStringArray(DFA7_transitionS);

    protected class DFA7 : DFA
    {
        public DFA7(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 7;
            this.eot = DFA7_eot;
            this.eof = DFA7_eof;
            this.min = DFA7_min;
            this.max = DFA7_max;
            this.accept = DFA7_accept;
            this.special = DFA7_special;
            this.transition = DFA7_transition;

        }

        override public string Description
        {
            get { return "59:1: stat : ( var_assignment | functioncall | do_block | while_stat | repeat_stat | if_stat | for_stat | func_definition | var_definition );"; }
        }

    }


    protected internal int DFA7_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA7_1 = input.LA(1);

                   	 
                   	int index7_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred7_Lua2()) ) { s = 10; }

                   	else if ( (synpred8_Lua2()) ) { s = 11; }

                   	 
                   	input.Seek(index7_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA7_2 = input.LA(1);

                   	 
                   	int index7_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred7_Lua2()) ) { s = 10; }

                   	else if ( (synpred8_Lua2()) ) { s = 11; }

                   	 
                   	input.Seek(index7_2);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA7_8 = input.LA(1);

                   	 
                   	int index7_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred14_Lua2()) ) { s = 9; }

                   	else if ( (true) ) { s = 12; }

                   	 
                   	input.Seek(index7_8);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae7 =
            new NoViableAltException(dfa.Description, 7, _s, input);
        dfa.Error(nvae7);
        throw nvae7;
    }
    const string DFA20_eotS =
        "\x0e\uffff";
    const string DFA20_eofS =
        "\x0e\uffff";
    const string DFA20_minS =
        "\x01\x05\x0b\x00\x02\uffff";
    const string DFA20_maxS =
        "\x01\x43\x0b\x00\x02\uffff";
    const string DFA20_acceptS =
        "\x0c\uffff\x01\x01\x01\x02";
    const string DFA20_specialS =
        "\x01\uffff\x01\x00\x01\x01\x01\x02\x01\x03\x01\x04\x01\x05\x01"+
        "\x06\x01\x07\x01\x08\x01\x09\x01\x0a\x02\uffff}>";
    static readonly string[] DFA20_transitionS = {
            "\x01\x08\x04\x04\x03\x05\x0b\uffff\x01\x07\x10\uffff\x01\x01"+
            "\x01\x02\x01\x03\x01\x06\x01\uffff\x01\x0b\x0d\uffff\x01\x09"+
            "\x03\uffff\x01\x0a\x01\uffff\x02\x0b",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            ""
    };

    static readonly short[] DFA20_eot = DFA.UnpackEncodedString(DFA20_eotS);
    static readonly short[] DFA20_eof = DFA.UnpackEncodedString(DFA20_eofS);
    static readonly char[] DFA20_min = DFA.UnpackEncodedStringToUnsignedChars(DFA20_minS);
    static readonly char[] DFA20_max = DFA.UnpackEncodedStringToUnsignedChars(DFA20_maxS);
    static readonly short[] DFA20_accept = DFA.UnpackEncodedString(DFA20_acceptS);
    static readonly short[] DFA20_special = DFA.UnpackEncodedString(DFA20_specialS);
    static readonly short[][] DFA20_transition = DFA.UnpackEncodedStringArray(DFA20_transitionS);

    protected class DFA20 : DFA
    {
        public DFA20(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 20;
            this.eot = DFA20_eot;
            this.eof = DFA20_eof;
            this.min = DFA20_min;
            this.max = DFA20_max;
            this.accept = DFA20_accept;
            this.special = DFA20_special;
            this.transition = DFA20_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 96:12: ( exp ',' )*"; }
        }

    }


    protected internal int DFA20_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA20_1 = input.LA(1);

                   	 
                   	int index20_1 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_1);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA20_2 = input.LA(1);

                   	 
                   	int index20_2 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_2);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA20_3 = input.LA(1);

                   	 
                   	int index20_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA20_4 = input.LA(1);

                   	 
                   	int index20_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 4 : 
                   	int LA20_5 = input.LA(1);

                   	 
                   	int index20_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 5 : 
                   	int LA20_6 = input.LA(1);

                   	 
                   	int index20_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_6);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 6 : 
                   	int LA20_7 = input.LA(1);

                   	 
                   	int index20_7 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_7);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 7 : 
                   	int LA20_8 = input.LA(1);

                   	 
                   	int index20_8 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_8);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 8 : 
                   	int LA20_9 = input.LA(1);

                   	 
                   	int index20_9 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_9);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 9 : 
                   	int LA20_10 = input.LA(1);

                   	 
                   	int index20_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_10);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 10 : 
                   	int LA20_11 = input.LA(1);

                   	 
                   	int index20_11 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred27_Lua2()) ) { s = 12; }

                   	else if ( (true) ) { s = 13; }

                   	 
                   	input.Seek(index20_11);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae20 =
            new NoViableAltException(dfa.Description, 20, _s, input);
        dfa.Error(nvae20);
        throw nvae20;
    }
    const string DFA24_eotS =
        "\x1e\uffff";
    const string DFA24_eofS =
        "\x01\x01\x1d\uffff";
    const string DFA24_minS =
        "\x01\x05\x02\uffff\x04\x00\x17\uffff";
    const string DFA24_maxS =
        "\x01\x41\x02\uffff\x04\x00\x17\uffff";
    const string DFA24_acceptS =
        "\x01\uffff\x01\x02\x1a\uffff\x01\x01\x01\uffff";
    const string DFA24_specialS =
        "\x03\uffff\x01\x00\x01\x01\x01\x02\x01\x03\x17\uffff}>";
    static readonly string[] DFA24_transitionS = {
            "\x01\x01\x04\uffff\x03\x06\x08\uffff\x08\x01\x01\uffff\x09"+
            "\x01\x01\x1c\x01\x03\x04\uffff\x0f\x01\x01\x04\x01\x01\x01\x1c"+
            "\x01\x01\x01\x05\x01\x01",
            "",
            "",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA24_eot = DFA.UnpackEncodedString(DFA24_eotS);
    static readonly short[] DFA24_eof = DFA.UnpackEncodedString(DFA24_eofS);
    static readonly char[] DFA24_min = DFA.UnpackEncodedStringToUnsignedChars(DFA24_minS);
    static readonly char[] DFA24_max = DFA.UnpackEncodedStringToUnsignedChars(DFA24_maxS);
    static readonly short[] DFA24_accept = DFA.UnpackEncodedString(DFA24_acceptS);
    static readonly short[] DFA24_special = DFA.UnpackEncodedString(DFA24_specialS);
    static readonly short[][] DFA24_transition = DFA.UnpackEncodedStringArray(DFA24_transitionS);

    protected class DFA24 : DFA
    {
        public DFA24(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 24;
            this.eot = DFA24_eot;
            this.eof = DFA24_eof;
            this.min = DFA24_min;
            this.max = DFA24_max;
            this.accept = DFA24_accept;
            this.special = DFA24_special;
            this.transition = DFA24_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 112:40: ( varSuffix )*"; }
        }

    }


    protected internal int DFA24_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA24_3 = input.LA(1);

                   	 
                   	int index24_3 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred53_Lua2()) ) { s = 28; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index24_3);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 1 : 
                   	int LA24_4 = input.LA(1);

                   	 
                   	int index24_4 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred53_Lua2()) ) { s = 28; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index24_4);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 2 : 
                   	int LA24_5 = input.LA(1);

                   	 
                   	int index24_5 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred53_Lua2()) ) { s = 28; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index24_5);
                   	if ( s >= 0 ) return s;
                   	break;
               	case 3 : 
                   	int LA24_6 = input.LA(1);

                   	 
                   	int index24_6 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred53_Lua2()) ) { s = 28; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index24_6);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae24 =
            new NoViableAltException(dfa.Description, 24, _s, input);
        dfa.Error(nvae24);
        throw nvae24;
    }
    const string DFA25_eotS =
        "\x1b\uffff";
    const string DFA25_eofS =
        "\x01\x01\x1a\uffff";
    const string DFA25_minS =
        "\x01\x05\x0d\uffff\x01\x00\x0c\uffff";
    const string DFA25_maxS =
        "\x01\x41\x0d\uffff\x01\x00\x0c\uffff";
    const string DFA25_acceptS =
        "\x01\uffff\x01\x02\x16\uffff\x01\x01\x02\uffff";
    const string DFA25_specialS =
        "\x0e\uffff\x01\x00\x0c\uffff}>";
    static readonly string[] DFA25_transitionS = {
            "\x01\x01\x04\uffff\x03\x18\x08\uffff\x02\x01\x01\uffff\x05"+
            "\x01\x01\uffff\x09\x01\x01\uffff\x01\x18\x04\uffff\x0f\x01\x01"+
            "\x0e\x01\x01\x01\uffff\x01\x01\x01\x18\x01\x01",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA25_eot = DFA.UnpackEncodedString(DFA25_eotS);
    static readonly short[] DFA25_eof = DFA.UnpackEncodedString(DFA25_eofS);
    static readonly char[] DFA25_min = DFA.UnpackEncodedStringToUnsignedChars(DFA25_minS);
    static readonly char[] DFA25_max = DFA.UnpackEncodedStringToUnsignedChars(DFA25_maxS);
    static readonly short[] DFA25_accept = DFA.UnpackEncodedString(DFA25_acceptS);
    static readonly short[] DFA25_special = DFA.UnpackEncodedString(DFA25_specialS);
    static readonly short[][] DFA25_transition = DFA.UnpackEncodedStringArray(DFA25_transitionS);

    protected class DFA25 : DFA
    {
        public DFA25(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 25;
            this.eot = DFA25_eot;
            this.eof = DFA25_eof;
            this.min = DFA25_min;
            this.max = DFA25_max;
            this.accept = DFA25_accept;
            this.special = DFA25_special;
            this.transition = DFA25_transition;

        }

        override public string Description
        {
            get { return "()* loopback of 114:22: ( nameAndArgs )*"; }
        }

    }


    protected internal int DFA25_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA25_14 = input.LA(1);

                   	 
                   	int index25_14 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred54_Lua2()) ) { s = 24; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index25_14);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae25 =
            new NoViableAltException(dfa.Description, 25, _s, input);
        dfa.Error(nvae25);
        throw nvae25;
    }
    const string DFA26_eotS =
        "\x15\uffff";
    const string DFA26_eofS =
        "\x01\x01\x14\uffff";
    const string DFA26_minS =
        "\x01\x05\x09\uffff\x01\x00\x0a\uffff";
    const string DFA26_maxS =
        "\x01\x40\x09\uffff\x01\x00\x0a\uffff";
    const string DFA26_acceptS =
        "\x01\uffff\x01\x02\x10\uffff\x01\x01\x02\uffff";
    const string DFA26_specialS =
        "\x0a\uffff\x01\x00\x0a\uffff}>";
    static readonly string[] DFA26_transitionS = {
            "\x01\x01\x04\uffff\x03\x12\x08\uffff\x02\x01\x01\uffff\x02"+
            "\x01\x01\uffff\x02\x01\x01\uffff\x01\x01\x01\uffff\x07\x01\x01"+
            "\uffff\x01\x12\x13\uffff\x01\x0a\x03\uffff\x01\x12",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "\x01\uffff",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            "",
            ""
    };

    static readonly short[] DFA26_eot = DFA.UnpackEncodedString(DFA26_eotS);
    static readonly short[] DFA26_eof = DFA.UnpackEncodedString(DFA26_eofS);
    static readonly char[] DFA26_min = DFA.UnpackEncodedStringToUnsignedChars(DFA26_minS);
    static readonly char[] DFA26_max = DFA.UnpackEncodedStringToUnsignedChars(DFA26_maxS);
    static readonly short[] DFA26_accept = DFA.UnpackEncodedString(DFA26_acceptS);
    static readonly short[] DFA26_special = DFA.UnpackEncodedString(DFA26_specialS);
    static readonly short[][] DFA26_transition = DFA.UnpackEncodedStringArray(DFA26_transitionS);

    protected class DFA26 : DFA
    {
        public DFA26(BaseRecognizer recognizer)
        {
            this.recognizer = recognizer;
            this.decisionNumber = 26;
            this.eot = DFA26_eot;
            this.eof = DFA26_eof;
            this.min = DFA26_min;
            this.max = DFA26_max;
            this.accept = DFA26_accept;
            this.special = DFA26_special;
            this.transition = DFA26_transition;

        }

        override public string Description
        {
            get { return "()+ loopback of 116:24: ( nameAndArgs )+"; }
        }

    }


    protected internal int DFA26_SpecialStateTransition(DFA dfa, int s, IIntStream _input) //throws NoViableAltException
    {
            ITokenStream input = (ITokenStream)_input;
    	int _s = s;
        switch ( s )
        {
               	case 0 : 
                   	int LA26_10 = input.LA(1);

                   	 
                   	int index26_10 = input.Index();
                   	input.Rewind();
                   	s = -1;
                   	if ( (synpred55_Lua2()) ) { s = 18; }

                   	else if ( (true) ) { s = 1; }

                   	 
                   	input.Seek(index26_10);
                   	if ( s >= 0 ) return s;
                   	break;
        }
        if (state.backtracking > 0) {state.failed = true; return -1;}
        NoViableAltException nvae26 =
            new NoViableAltException(dfa.Description, 26, _s, input);
        dfa.Error(nvae26);
        throw nvae26;
    }
 

    public static readonly BitSet FOLLOW_chunk_in_program133 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_EOF_in_program137 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_stat_in_chunk155 = new BitSet(new ulong[]{0x1000005C4B600022UL});
    public static readonly BitSet FOLLOW_21_in_chunk158 = new BitSet(new ulong[]{0x1000005C4B600022UL});
    public static readonly BitSet FOLLOW_laststat_in_chunk165 = new BitSet(new ulong[]{0x0000000000200002UL});
    public static readonly BitSet FOLLOW_21_in_chunk168 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_chunk_in_block183 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_var_assignment_in_stat196 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_functioncall_in_stat202 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_do_block_in_stat208 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_while_stat_in_stat214 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_repeat_stat_in_stat220 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_if_stat_in_stat226 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_for_stat_in_stat232 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_func_definition_in_stat238 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_var_definition_in_stat244 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_22_in_var_definition254 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_namelist_in_var_definition256 = new BitSet(new ulong[]{0x0000000000800002UL});
    public static readonly BitSet FOLLOW_23_in_var_definition259 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_explist1_in_var_definition261 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_varlist1_in_var_assignment272 = new BitSet(new ulong[]{0x0000000000800000UL});
    public static readonly BitSet FOLLOW_23_in_var_assignment274 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_explist1_in_var_assignment277 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_22_in_func_definition285 = new BitSet(new ulong[]{0x0000000001000000UL});
    public static readonly BitSet FOLLOW_24_in_func_definition287 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_func_definition289 = new BitSet(new ulong[]{0x1000000000000000UL});
    public static readonly BitSet FOLLOW_func_body_in_func_definition291 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_24_in_func_definition299 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_funcname_in_func_definition301 = new BitSet(new ulong[]{0x1000000000000000UL});
    public static readonly BitSet FOLLOW_func_body_in_func_definition303 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_25_in_for_stat314 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_for_stat316 = new BitSet(new ulong[]{0x0000000000800000UL});
    public static readonly BitSet FOLLOW_23_in_for_stat318 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_for_stat320 = new BitSet(new ulong[]{0x0000000004000000UL});
    public static readonly BitSet FOLLOW_26_in_for_stat322 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_for_stat324 = new BitSet(new ulong[]{0x000000000C000000UL});
    public static readonly BitSet FOLLOW_26_in_for_stat327 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_for_stat329 = new BitSet(new ulong[]{0x0000000008000000UL});
    public static readonly BitSet FOLLOW_27_in_for_stat333 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_for_stat335 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_for_stat337 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_25_in_for_stat343 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_namelist_in_for_stat345 = new BitSet(new ulong[]{0x0000000020000000UL});
    public static readonly BitSet FOLLOW_29_in_for_stat347 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_explist1_in_for_stat349 = new BitSet(new ulong[]{0x0000000008000000UL});
    public static readonly BitSet FOLLOW_27_in_for_stat351 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_for_stat353 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_for_stat355 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_30_in_if_stat368 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_if_stat370 = new BitSet(new ulong[]{0x0000000080000000UL});
    public static readonly BitSet FOLLOW_31_in_if_stat372 = new BitSet(new ulong[]{0x1000005F5B600020UL});
    public static readonly BitSet FOLLOW_block_in_if_stat374 = new BitSet(new ulong[]{0x0000000310000000UL});
    public static readonly BitSet FOLLOW_32_in_if_stat377 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_if_stat379 = new BitSet(new ulong[]{0x0000000080000000UL});
    public static readonly BitSet FOLLOW_31_in_if_stat381 = new BitSet(new ulong[]{0x1000005F5B600020UL});
    public static readonly BitSet FOLLOW_block_in_if_stat383 = new BitSet(new ulong[]{0x0000000310000000UL});
    public static readonly BitSet FOLLOW_33_in_if_stat389 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_if_stat391 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_if_stat395 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_34_in_laststat403 = new BitSet(new ulong[]{0x10005E0001001FE2UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_explist1_in_laststat406 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_35_in_laststat412 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_36_in_repeat_stat420 = new BitSet(new ulong[]{0x1000007C4B600020UL});
    public static readonly BitSet FOLLOW_block_in_repeat_stat422 = new BitSet(new ulong[]{0x0000002000000000UL});
    public static readonly BitSet FOLLOW_37_in_repeat_stat424 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_repeat_stat426 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_38_in_while_stat434 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_while_stat436 = new BitSet(new ulong[]{0x0000000008000000UL});
    public static readonly BitSet FOLLOW_27_in_while_stat438 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_while_stat440 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_while_stat442 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_27_in_do_block453 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_do_block455 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_do_block457 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_var_in_varlist1475 = new BitSet(new ulong[]{0x0000000004000002UL});
    public static readonly BitSet FOLLOW_26_in_varlist1478 = new BitSet(new ulong[]{0x1000000000000020UL});
    public static readonly BitSet FOLLOW_var_in_varlist1480 = new BitSet(new ulong[]{0x0000000004000002UL});
    public static readonly BitSet FOLLOW_NAME_in_funcname491 = new BitSet(new ulong[]{0x0000018000000002UL});
    public static readonly BitSet FOLLOW_39_in_funcname494 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_funcname496 = new BitSet(new ulong[]{0x0000018000000002UL});
    public static readonly BitSet FOLLOW_40_in_funcname501 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_funcname503 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NAME_in_namelist515 = new BitSet(new ulong[]{0x0000000004000002UL});
    public static readonly BitSet FOLLOW_26_in_namelist519 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_namelist521 = new BitSet(new ulong[]{0x0000000004000002UL});
    public static readonly BitSet FOLLOW_exp_in_explist1533 = new BitSet(new ulong[]{0x0000000004000000UL});
    public static readonly BitSet FOLLOW_26_in_explist1535 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_explist1539 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_41_in_exp555 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_42_in_exp562 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_43_in_exp569 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_number_in_exp576 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_stringToken_in_exp583 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_44_in_exp590 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_function_in_exp597 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_prefixexp_in_exp604 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_tableconstructor_in_exp611 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_unop_in_exp618 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_exp620 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_binop_in_exp627 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_exp629 = new BitSet(new ulong[]{0x0FFFE00000000002UL});
    public static readonly BitSet FOLLOW_set_in_binop643 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NAME_in_var711 = new BitSet(new ulong[]{0x5000018000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_60_in_var715 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_var717 = new BitSet(new ulong[]{0x2000000000000000UL});
    public static readonly BitSet FOLLOW_61_in_var719 = new BitSet(new ulong[]{0x5000018000001C00UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_varSuffix_in_var721 = new BitSet(new ulong[]{0x5000018000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_varSuffix_in_var727 = new BitSet(new ulong[]{0x5000018000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_varOrExp_in_prefixexp739 = new BitSet(new ulong[]{0x1000010000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_nameAndArgs_in_prefixexp742 = new BitSet(new ulong[]{0x1000010000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_varOrExp_in_functioncall752 = new BitSet(new ulong[]{0x1000010000001C00UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_nameAndArgs_in_functioncall754 = new BitSet(new ulong[]{0x1000010000001C02UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_var_in_varOrExp763 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_60_in_varOrExp767 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_varOrExp769 = new BitSet(new ulong[]{0x2000000000000000UL});
    public static readonly BitSet FOLLOW_61_in_varOrExp771 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_40_in_nameAndArgs781 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_nameAndArgs783 = new BitSet(new ulong[]{0x1000010000001C00UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_args_in_nameAndArgs788 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_nameAndArgs_in_varSuffix799 = new BitSet(new ulong[]{0x5000018000001C00UL,0x0000000000000001UL});
    public static readonly BitSet FOLLOW_62_in_varSuffix805 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_varSuffix807 = new BitSet(new ulong[]{0x8000000000000000UL});
    public static readonly BitSet FOLLOW_63_in_varSuffix809 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_39_in_varSuffix814 = new BitSet(new ulong[]{0x0000000000000020UL});
    public static readonly BitSet FOLLOW_NAME_in_varSuffix816 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_60_in_args829 = new BitSet(new ulong[]{0x30005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_explist1_in_args832 = new BitSet(new ulong[]{0x2000000000000000UL});
    public static readonly BitSet FOLLOW_61_in_args836 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_tableconstructor_in_args840 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_stringToken_in_args844 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_24_in_function853 = new BitSet(new ulong[]{0x1000000000000000UL});
    public static readonly BitSet FOLLOW_func_body_in_function855 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_60_in_func_body864 = new BitSet(new ulong[]{0x2000100000000020UL});
    public static readonly BitSet FOLLOW_func_parlist_in_func_body867 = new BitSet(new ulong[]{0x2000000000000000UL});
    public static readonly BitSet FOLLOW_61_in_func_body872 = new BitSet(new ulong[]{0x1000005C5B600020UL});
    public static readonly BitSet FOLLOW_block_in_func_body874 = new BitSet(new ulong[]{0x0000000010000000UL});
    public static readonly BitSet FOLLOW_28_in_func_body876 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_namelist_in_func_parlist885 = new BitSet(new ulong[]{0x0000000004000002UL});
    public static readonly BitSet FOLLOW_26_in_func_parlist888 = new BitSet(new ulong[]{0x0000100000000000UL});
    public static readonly BitSet FOLLOW_44_in_func_parlist890 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_44_in_func_parlist897 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_64_in_tableconstructor908 = new BitSet(new ulong[]{0x50005E0001001FE0UL,0x000000000000000FUL});
    public static readonly BitSet FOLLOW_fieldlist_in_tableconstructor911 = new BitSet(new ulong[]{0x0000000000000000UL,0x0000000000000002UL});
    public static readonly BitSet FOLLOW_65_in_tableconstructor915 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_field_in_fieldlist924 = new BitSet(new ulong[]{0x0000000004200002UL});
    public static readonly BitSet FOLLOW_fieldsep_in_fieldlist927 = new BitSet(new ulong[]{0x50005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_field_in_fieldlist929 = new BitSet(new ulong[]{0x0000000004200002UL});
    public static readonly BitSet FOLLOW_fieldsep_in_fieldlist935 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_62_in_field945 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_field947 = new BitSet(new ulong[]{0x8000000000000000UL});
    public static readonly BitSet FOLLOW_63_in_field949 = new BitSet(new ulong[]{0x0000000000800000UL});
    public static readonly BitSet FOLLOW_23_in_field951 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_field953 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_NAME_in_field957 = new BitSet(new ulong[]{0x0000000000800000UL});
    public static readonly BitSet FOLLOW_23_in_field959 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_field961 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_exp_in_field965 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_fieldsep0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_unop0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_number0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_set_in_stringToken0 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_chunk_in_synpred6_Lua2183 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_var_assignment_in_synpred7_Lua2196 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_functioncall_in_synpred8_Lua2202 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_func_definition_in_synpred14_Lua2238 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_exp_in_synpred27_Lua2533 = new BitSet(new ulong[]{0x0000000004000000UL});
    public static readonly BitSet FOLLOW_26_in_synpred27_Lua2535 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_binop_in_synpred37_Lua2627 = new BitSet(new ulong[]{0x10005E0001001FE0UL,0x000000000000000DUL});
    public static readonly BitSet FOLLOW_exp_in_synpred37_Lua2629 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_varSuffix_in_synpred53_Lua2727 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_nameAndArgs_in_synpred54_Lua2742 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_nameAndArgs_in_synpred55_Lua2754 = new BitSet(new ulong[]{0x0000000000000002UL});
    public static readonly BitSet FOLLOW_var_in_synpred56_Lua2763 = new BitSet(new ulong[]{0x0000000000000002UL});

}
}